Простой поиск Google выявит множество решений для преобразования двухмерного массива в HTML с помощью PHP. К сожалению, ни у кого из них нет ответов, которые я ищу.
Я хочу, чтобы общий фрагмент кода преобразовывал массив в таблицу HTML. Где большинство примеров идут не так, так это то, что они предполагают, что программист знает имя полей таблицы. Я хочу, чтобы этот код был общим, чтобы я мог его использовать, даже если я не знаю названия полей.
Я вижу, мне нужны две петли. Один вложенный внутри другого. Я не уверен в том, как получить значения из-за того, что я не знаю ключей.
Конечный результат, мы надеемся, выведет html примерно так:
<th> <td>x/y</td> <td> x1 </td> <td> x2 </td> </th> <tr> <td>y1</td> <td> x1y1 </td> <td> x2y1 </td> </tr> <tr> <td>y2</td> <td> x1y2 </td> <td> x2y2 </td> </tr>
Пожалуйста, помните, что я хочу общее и простое решение. Надеюсь, это ясно.
Следующий код рассмотрит два измерения массива и превратит их в таблицу. Независимо от того, какой key
может быть, вы получите визуальное представление об этом. Если у них есть имя ключа, а не только индекс, значения будут доступны в $key
и $subkey
соответственно. Поэтому у вас есть их, если они вам нужны.
Код:
$myarray = array("key1"=>array(1,2,3,4), "key2"=>array(2,3,4,5), "key3"=>array(3,4,5,6), "key4"=>array(4,5,6,7)); //Having a key or not doesn't break it $out = ""; $out .= "<table>"; foreach($myarray as $key => $element){ $out .= "<tr>"; foreach($element as $subkey => $subelement){ $out .= "<td>$subelement</td>"; } $out .= "</tr>"; } $out .= "</table>"; echo $out;
Результат:
Если вы хотите видеть ключи как заголовки, вы можете добавить этот код после echo "<table>";
линия:
echo "<tr>"; foreach($myarray as $key => $element) echo "<td>$key</td>"; echo "</tr>";
В результате:
Вам понадобятся две петли. Один, чтобы пройти через первый уровень, а другой пройти через второй уровень. Это предполагает, что ваш двумерный массив регулярно прямоугольный.
//our example array $foo['one']['a'] = '1a'; $foo['one']['b'] = '1b'; $foo['two']['a'] = '2a'; $foo['two']['b'] = '1b'; //open table echo '<table>'; //our control variable $first = true; foreach($foo as $key1 => $val1) { //if first time through, we need a header row if($first){ echo '<tr><th></th>'; foreach($val1 as $key2 => $value2){ echo '<th>'.$key2.'</th>'; } echo '</tr>'; //set control to false $first = false; } //echo out each object in the table echo '<tr><td>'.$key1.'</td>'; foreach($val1 as $key2 => $value2){ echo '<td>'.$value2.'</td>'; } echo '</tr>'; } echo '</table>';
Не проверял его, но это должно сделать это за вас. Первый уровень массива – это строки, второй уровень массива – столбцы.
Образец для нашего массива $ foo:
+-----+-----+-----+ | | a | b | +-----+-----+-----+ | one | 1a | 1b | +-----+-----+-----+ | two | 2a | 2b | +-----+-----+-----+
Ваши петли будут примерно такими:
foreach($myArray as $k => $v)
В $ k вы сохраните ключ, в $ v значение … Тогда вы можете распечатать оба.