PHP двумерный массив в HTML
простой поиск 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>
пожалуйста, помните, что я хочу общее и простое решение. Надеюсь, это ясно.
3 ответов
следующий код будет просматривать два измерения массива и сделать их в таблицу. Независимо от того, что key
может быть, вы получите наглядное представление о нем. Если они ... --7-->do иметь имя ключа, а не только индекс, значения будут доступны в $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 значение... Затем вы можете распечатать.