Php толкает значения в 2-мерный массив - PullRequest
8 голосов
/ 06 февраля 2012

У меня есть двумерный массив, и я хочу передать ему значения с помощью цикла while, например:

   $arr[0][1] = 1. value
   $arr[0][2] = 2. value

Я пытался

   while($zRow = mysql_fetch_array($zQuery))
    {
     $props[]['name'] =$zRow['name'];
     $props[]['photo'] =$zRow['thumbnail'];
    }

этот цикл выводит имяв $ props [0] [имя] и миниатюру в $ props [1] [фото]

я также пытался

   $j = 0;
   while($zRow = mysql_fetch_array($zQuery))
    {
     $props[$j]['name'] =$zRow['name'];
     $props[$j]['photo'] =$zRow['thumbnail'];
     $j+=1;     
    }

, который работает, но с этим я, когда я позже использую цикл foreach, это создает проблемы как «Недопустимый тип смещения»

, и вот мой цикл foreach

    foreach($props as $no)
    {
      echo $props[$no]['name'];
    } 

Теперь мои вопросы;1) есть ли другой способ, кроме цикла while с переменной $ j, например array_push для 2-мерных массивов 2) как использовать цикл foreach для 2-мерных массивов

Ответы [ 2 ]

13 голосов
/ 06 февраля 2012

Вы можете изменить первый цикл следующим образом:

while($zRow = mysql_fetch_array($zQuery))
{
    $row = array();
    $row['name'] = $zRow['name'];
    $row['photo'] = $zRow['thumbnail'];
    $props[] = $row;
}

Ваш метод также работает, но вам нужна эта дополнительная переменная.

Во втором цикле вам действительно нужно сделать следующее:

foreach($props as $index => $array)
{
    echo $props[$index]['name'];
    // OR
    echo $array['name'];
}
4 голосов
/ 06 февраля 2012

Нажатие чего-либо на массив с $myArray[] = 'foo' увеличивает счетчик массива.

Для многомерного массива вам необходимо заполнить «внутренний» массив, а затем передать его во «внешний» (в вашем случае $props) массив.

while($zRow = mysql_fetch_array($zQuery)) {
    $data = array('name' => $zRow['name'], 'photo' => $zRow['thumbnail']);
    $props[] = $data;
}

Для перебора многомерных массивов, глубина которых известна:

foreach ($props as $prop) {
    foreach ($prop as $key => $value) {
        echo "{$key} => {$value}" . PHP_EOL;
    }
}

Если глубина вложения неизвестна, вам, возможно, придется использовать рекурсивную функцию для сбора данных.

...