У меня небольшая проблема с циклом for (), который динамически отображает значения внутри другого цикла foreach ().
Небольшой фон кода:
Таблица вывода создается динамически на основе значений, полученных из одного запроса mysql SELECT (который является первым выбором) из 1 столбца (который имеет имя «coloane») в таблице, называемой «категориями»;
Значения, хранящиеся в столбце «coloane», на самом деле являются именами некоторых столбцов из другой таблицы, называемой «статьями»,
Первый mysql select – это получить значения из столбца coloane, чтобы я мог создать второй. После того, как вторая таблица возвращает строки (num_rows ()> 0), я начинаю создавать таблицу.
Таблица имеет 2 статических столбца, которые всегда присутствуют, а остальные столбцы динамически добавляются на основе разных критериев.
Сценарий:
здесь значения объединяются следующим образом:
'<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
Между тем, с помощью друга, я, наконец, нашел, что происходит не так.
Переменная превращается из строки в число, потому что в таблице, называемой «категориями», столбец с именем «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: Я не пробовал это, но я бы подумал, что это что-то вроде этого. Просто:
получить заголовки по идентификатору категории
получить записи по идентификатору категории.
Повторите первый набор результатов как заголовки с петлей,
повторите второй набор результатов как строки таблицы со столбцами в цикле.