печать многомерного массива php в виде таблицы html

#php

#php

Вопрос:

У меня есть этот массив:

 Array
(
    [Zahid] => Array
        (
            [physics] => 35
            [maths] => 30
            [chemistry] => 39
        )

    [Amir] => Array
        (
            [physics] => 30
            [maths] => 32
            [chemistry] => 29
        )

    [Kundan] => Array
        (
            [physics] => 31
            [maths] => 22
            [chemistry] => 39
        )

    [Narayan] => Array
        (
            [physics] => 31
            [maths] => 22
            [chemistry] => 39
        )

)
 

Я хочу показать данный массив в этом формате таблицы HTML. Я пытался использовать цикл foreach, но он не показывает правильный формат. Как я могу это сделать?

 <table border="1">
    <tr>
        <th>Zahid</th>
        <th>Amir</th>
        <th>Kundan</th>
        <th>Narayan</th>
    </tr>

    <tr>
        <td>physics : 35</td>
        <td>physics : 30</td>
        <td>physics : 31</td>
        <td>physics : 31</td>
    </tr>

    <tr>
        <td>maths : 30</td>
        <td>maths : 32</td>
        <td>maths : 22</td>
        <td>maths : 22</td>

    </tr>

    <tr>
        <td>chemistry : 39</td>
        <td>chemistry : 29</td>
        <td>chemistry : 39</td>
        <td>chemistry : 39</td>
    </tr>

</table>
 

Комментарии:

1. «Я попытался выполнить цикл foreach, но он не показывает формат coeect». Покажите код, который вы пробовали, и результирующий результат.

2. Было бы неплохо, если бы вы также включили var_export массива.

3. Вероятно, вам нужно изменить порядок ваших данных в массиве в соответствии с предметами, а не именами, например, Array ([Physics] => Array ([Zahid] => 35 [Amir] => 30) ) и т. Д. Таким образом, будет легче перебирать строки.

4. @Andreas — Я написал этот конвертер именно для такой вещи artisticphoenix.com/2018/11/11/output-converter Он может конвертировать print_r или var_dump в var_export — он работает довольно хорошо, не обращайте внимания на остальную часть моего сайта, так как у меня, кажется, никогда не бывает времени поработать над ним. Вы можете найти исходный код для него на GitHub

Ответ №1:

Вы не сможете использовать вложенный цикл foreach в основном массиве, потому что в итоге у вас будут ученики в виде строк, а предметы — в виде столбцов, что противоположно тому, что вы хотите. Я предполагаю, что это то, что вы получаете, когда говорите, что он не отображает правильный формат. Вы можете получить список предметов от одного студента:

 $subjects = array_keys(reset($students));
 

Затем повторите это, чтобы получить ваши строки, и внутри каждой строки повторите список учащихся, чтобы получить их оценку по предмету, который отображается в этой строке.

 // each subject is a row
foreach ($subjects as $subject) {

    // each student is a column
    foreach ($students as $student => $grades) {
        echo "$subject : $grades[subject]";
    }
}
 

Это общая идея, я уверен, что вы можете разобраться с разметкой таблицы, поэтому я оставил это для простоты.

Ответ №2:

Я не спрашиваю, почему вы игнорируете ссылку на студентов… итак, самый простой подход к решению, попробуйте это:

     // student
    $students = array_keys($array);

    //physics 
    $physics = array_column($array, 'physics');

    //maths
    $maths = array_column($array, 'maths');
 

и, наконец, делайте все, что хотите, с данными, извлеченными из $array.