Использование многомерного массива в цикле For в PHP - PullRequest
1 голос
/ 17 марта 2011

У меня есть следующий многомерный массив:

<? $array = array(0 => 2, 3 => 1, 5 => 1 );

Что выглядит при печати:

Array ( [0] => 2 [3] => 1 [5] => 1 );  //the value in brackets is the shoe size

Первая часть массива - это «размер обуви», а вторая часть массива - это число, имеющееся в инвентаре.

Я пытаюсь распечатать таблицу, в которой перечислены все размеры обуви (даже если ее нет в массиве), а затем перебрать, чтобы указать «количество, доступное» в инвентаре.

Вот что у меня есть, но не работает :

<?php
   $array = array(0 => 2, 3 => 1, 5 => 1 );
   print ('<table>');
    print ('<thead><tr><th>Shoe Size</th>');
    for ($i=3; $i<=12; $i += .50) {
               print ('<th>'.$i.'</th>');
            }
    print('</tr></thead>');
    print('<tbody><td>Total</td>');
    foreach ($array as $shoe_size=>$number_in_inventory) { 
        for ($i=3; $i<=12; $i += .50) {
            if ($i == $shoe_size) {
                print('<td>'.$number_in_inventory.'</td>'); 
            }
            else {
                print('<td>0</td>');
            }
        }
    }
    print("</tbody></table>");

Моя проблема в том, что у меня есть цикл foreach AND for, он выводит в два раза больше столбцов таблицы (<td>) ).

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

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Измените ваш основной цикл, чтобы пройти каждый возможный размер обуви;если размер существует в массиве инвентаря ($array), то выведите это значение, иначе выведите ноль.

// ...
print('<tbody><td>Total</td>');
for ($i = 3; $i <= 12; $i += .50) {
    if (array_key_exists("$i", $array)) {
        print '<td>'.$array["$i"].'</td>'; 
    } else {
        print '<td>0</td>';
    }
}
// ...

Моя проблема в том, что у меня есть цикл foreach И цикл for, онпечатает вдвое больше столбцов таблицы (ы).

Именно в этом проблема.Как и в разделе <th>, вы хотите напечатать <td> для каждого из возможных размеров обуви (от 3 до 12).Для каждого возможного размера обуви все, что вам нужно сделать, это проверить, есть ли соответствующая стоимость в инвентаре, как в моем фрагменте выше.

0 голосов
/ 17 марта 2011

Вы можете попробовать пройтись по всем размерам, а затем для каждого размера проверить, находится ли он в массиве, используя array_key_exists()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...