PHP. работаете со списком() и каждым()?

Это рабочий пример кода из php doc для использования list() с каждым()

<?php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit);
while (list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}
?>

Выход

a => apple
b => banana
c => cranberry

Я не понимаю, почему это работает и выводится таким образом. Потому что,

из API каждой() говорится, что каждая() возвращает массив с 4 пары "ключ-значение". Итак, each($fruit) должно быть таким:

Array
(
    [1] => yy
    [value] => yy
    [0] => xx
    [key] => xx
)

для кода:

while (list($key, $val) = each($fruit)) {
        echo "$key => $val\n";
    }

разве $key не должно равняться each($fruit)[1], а $val не должно равняться each($fruit)[value]?


person gilzero    schedule 07.06.2012    source источник
comment
foreach — инструмент на ваш выбор!   -  person dan-lee    schedule 07.06.2012
comment
С foreach PHP выполняет итерацию по копии массива вместо фактического массива. Напротив, при использовании each() и for PHP перебирает исходный массив.   -  person gilzero    schedule 07.06.2012
comment
ничего страшного, просто разные варианты. :)   -  person gilzero    schedule 07.06.2012


Ответы (2)


Примечание:

list() работает только с числовыми массивами и предполагает, что числовые индексы начинаются с 0.

http://php.net/list

Другими словами, list активно ищет числовые ключи по порядку. list($foo, $bar) требует, чтобы назначенный массив имел ключи 0 и 1 и назначал их $foo и $bar соответственно. Неважно, в каком порядке эти ключи находятся в самом массиве.

person deceze♦    schedule 07.06.2012
comment
отличный улов. понятно, что. - person gilzero; 07.06.2012
comment
Примечание. Возможно, это изменилось в PHP 7. - person James; 24.08.2018

Вещи обновлены в PHP 7.1

Какие новости?

  • list() имеет новое сокращение
  • list() поддерживает именованные ключи

сокращение list()

$array = [3,5,1];
[$a, $b, $c] = $array;

Использование для именованных ключей

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
['a' => $a, 'b' => $b, 'c' => $c] = $fruit;

// $a = 'apple'
// $b = 'banana';
// $c = 'cranberry';

Источник: список PHP()

person Supun Kavinda    schedule 04.05.2019