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>

Пожалуйста, помните, что мне нужно общее и простое решение. Я надеюсь, что это ясно.

Author: Brian Tompsett - 汤莱恩, 2012-05-13

3 answers

Следующий код просмотрит два измерения массива и превратит их в таблицу. Независимо от того, каким может быть 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;

Результат:

enter image description here

Если вы хотите видеть ключи в качестве заголовков, вы можно было бы добавить этот код после строки echo "<table>";:

echo "<tr>";
foreach($myarray as $key => $element) echo "<td>$key</td>";
echo "</tr>";

В результате чего:

enter image description here

 13
Author: Juan Cortés, 2012-12-20 11:37:41

Вам понадобятся две петли. Один, чтобы пройти через первый уровень, а другой, чтобы пройти через второй уровень. Это предполагает, что ваш двумерный массив имеет правильную прямоугольную форму.

//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  |
+-----+-----+-----+
 1
Author: Jake M, 2012-05-13 11:58:26

Ваши циклы будут примерно такими:

foreach($myArray as $k => $v)

В $k вы введете ключ, в $v - значение... Затем вы можете распечатать и то, и другое.

 -1
Author: Napolux, 2012-05-13 11:32:05