PHP отображает только первое значение в цикле for () intinde другого цикла foreach ()

У меня небольшая проблема с циклом for (), который динамически отображает значения внутри другого цикла foreach ().

Небольшой фон кода:

  1. Таблица вывода создается динамически на основе значений, полученных из одного запроса mysql SELECT (который является первым выбором) из 1 столбца (который имеет имя «coloane») в таблице, называемой «категориями»;

  2. Значения, хранящиеся в столбце «coloane», на самом деле являются именами некоторых столбцов из другой таблицы, называемой «статьями»,

  3. Первый mysql select – это получить значения из столбца coloane, чтобы я мог создать второй. После того, как вторая таблица возвращает строки (num_rows ()> 0), я начинаю создавать таблицу.

  4. Таблица имеет 2 статических столбца, которые всегда присутствуют, а остальные столбцы динамически добавляются на основе разных критериев.

Сценарий:

  • Я взорвую значения, полученные из первого выбора – из столбца «coloane» – чтобы сделать [th] для заголовка таблицы;
  • этот взрыв я хранил его под переменной «$ rows_th»;
  • чтобы сделать [th] для заголовка таблицы, я использую цикл foreach () (и здесь также удаляю любые символы подчеркивания);
  • после этого я продолжаю создавать [tbody] и [td] с использованием другого foreach (), только чтобы этот foreach делался для значений второго выбора;
  • внутри этого foreach () я создаю еще один цикл, используя функцию for () для переменной «$ rows_th», поэтому таблица имеет одинаковую длину;
  • здесь значения объединяются следующим образом:

    '<td id="'.$i.'">'.$values_td[$rows_th[$i]].'</td>'; 

Основная проблема заключается в том, что, используя формат, указанный выше, он отображает только первое значение !

Когда я попытался проверить значение $ values_td [$ rows_th [$ i]] с помощью функции is_string (), я обнаружил, что первое значение является строкой, и после этого каждое другое значение не является строкой …

Выполненный тест:

  if (is_string($values_td[$rows_th[$i]])) print '<td id="'.$i.'">Value found!!!</td>'; } else { print '<td id="'.$i.'">No luck...</td>'; } 

Любые идеи о том, что может пойти не так?

Я знаю, что у меня что-то не хватает, но я просто не могу понять: – /

Весь код указан здесь: http://pastebin.com/4MFifh92

Solutions Collecting From Web of "PHP отображает только первое значение в цикле for () intinde другого цикла foreach ()"

Между тем, с помощью друга, я, наконец, нашел, что происходит не так.

Переменная превращается из строки в число, потому что в таблице, называемой «категориями», столбец с именем «coloane» имеет значения, разделенные запятой «,» (запятая) и «» (пробел)

  ------------------------------------------ | coloane | ------------------------------------------ make, model, location, comments, status ------------------------------------------ 

Чтобы исправить это, я обнаружил, что могу попытаться сделать str_replace в простом цикле foreach () 🙂

Что-то вроде этого:

  $i=0; foreach($rows_th as $values_th) { $i++; $cols_td = str_replace(' ', '', $values_th); $actual_value = $values_td->$cols_td; print '<td id="'.$i.'">'.$actual_value.'</td>'; } 

И это сделало трюк 🙂

Надеюсь, это поможет другим, которые сталкиваются с проблемами, подобными этому 🙂

С уважением, Майк

Разве вы не можете просто сделать что-то вроде:

 SELECT * FROM results_query_header_by_cat WHERE `id` = 3; 

Затем:

 SELECT * FROM results_query_content_by_cat WHERE `id_category` = 3; 

Затем с результатами:

 echo '[thead]'; foreach ( $results as $result ){ foreach( $result['coloane'] as $header ){ echo '[th]'.$header.'[/th]'; } } echo '[/thead][tbody]'; foreach ( $records as $record ){ echo '[tr][td]' . $result['producator'] . '[/td][td]' . $result['model'] . '[/td][td]' . $result['imei'] . '[/td][td]' . $result['locatie'] . '[/td][/tr]'; } echo '[/tbody]'; 

Это то, что вы ищете?

e: Я не пробовал это, но я бы подумал, что это что-то вроде этого. Просто:

  • получить заголовки по идентификатору категории

  • получить записи по идентификатору категории.

  • Повторите первый набор результатов как заголовки с петлей,

  • повторите второй набор результатов как строки таблицы со столбцами в цикле.