Функция each () и list () - PullRequest
       11

Функция each () и list ()

5 голосов
/ 12 февраля 2010

Я не очень хорошо понимаю функции each () и list (). Кто-нибудь может дать мне немного больше подробностей и объяснить, чем это может быть полезно?

Edit:

<?php
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
?>

Array
(
    [1] => bob
    [value] => bob
    [0] => 0
    [key] => 0
)

Значит ли это, что в массиве [1] есть значение bob, но оно явно в массиве [0]?

Ответы [ 8 ]

5 голосов
/ 12 февраля 2010

list сама по себе не является функцией, так как используется совсем по-другому.

Скажем, у вас есть массив

$arr = array('Hello', 'World');

С помощью list вы можете быстро назначить эти различные элементы массива переменным

list($item1, $item2) = $arr; //$item1 equals 'Hello' and $item2 equals 'World'
5 голосов
/ 12 февраля 2010

Функция each () возвращает текущий ключ и значение элемента и перемещает внутренний указатель вперед. каждый ()

Функция списка - назначает переменные, как если бы они были массивом список ()

Пример использования для итерации массивов

  while(list($key,$val) = each($array))
    {
      echo "The Key is:$key \n";
      echo "The Value is:$val \n";

    }
2 голосов
/ 15 февраля 2016

Редактировать: вероятно, стоит отметить, что each устарела

Предупреждение: эта функция устарела с версии PHP 7.2.0. Полагаться на эту функцию крайне не рекомендуется


давайте сначала посмотрим на each(): он возвращает текущее значение (сначала это $array[0 | "first value in association array ]. Поэтому

  $prices = ('x'=>100 , 'y'=>200 , 'z'= 300 );

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

while( $e = each($prices) ){
    echo $e[key] . "  " . $e[value] . "<br/>" ; 
}

когда каждый достигает точки на несуществующем элементе, который может вызвать цикл while для завершения. Когда вы вызываете each(), он дает вам массив с четырьмя значениями и четырьмя индексами для местоположений массива. Положения 'key' и 0 содержат ключ текущего элемента, а местоположения 'value' и 1 содержат значение текущего элемента.

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

во-вторых, давайте посмотрим на list(). в основном он будет делать то же самое с переименованием «value» и «key», хотя его следует использовать вместе с each()

while( list($k , $v ) = each($prices) ){
    echo $k /*$e[key]*/  . "  " . $v /*$e[value]*/ . "<br/>" ;
    }

Итак, в двух словах each() перебирает массив каждый раз, возвращая массив. list() переименовывает значение пары ключей массива, который будет использоваться внутри цикла.

УВЕДОМЛЕНИЕ: reset($prices):

сбрасывает указатель each() для этого массива в качестве первого элемента.

2 голосов
/ 12 февраля 2010

Очень распространенный пример для list - это размышления о файлах CSV. Представьте, что у вас есть простая база данных, которая хранится как CSV со столбцами id, title и text, такой файл может выглядеть так:

1|Foo|Lorem ipsum dolor|
2|Bar|sit amet|
...

Теперь, когда вы анализируете этот файл, вы можете сделать это следующим образом, используя функцию list:

$lines = file( 'myFile.csv' );
for ( $i = 0; $i < count( $lines ); $i++ )
{
    list( $id, $title, $text, $null ) = explode( '|', $lines[$i], 4 );
    echo "Id: $id, Title: $title\n$text\n\n";
}

Другая функция, each, по сути, является просто старым способом обхода массивов с использованием внутренних указателей. Более распространенный способ сделать это - использовать foreach сейчас.

1 голос
/ 12 февраля 2010

Скажем, у вас есть многомерный массив:

+---+------+-------+
|ID | Name | Job   |
| 1 | Al   | Cop   |
| 2 | Bob  | Cook  |
+---+------+-------+

Вы можете сделать что-то вроде:

<?php
while(list($id,$name,$job) = each($array)) {
    echo "<a href=\"profile.php?id=".$id."\">".$name."</a> is a ".$job;
}
?>
1 голос
/ 12 февраля 2010

Чтобы ответить на вопрос в вашем первом редактировании:

По сути, PHP создает гибридный массив с парой ключ / значение из текущего элемента в исходном массиве.

Таким образом, вы можете получить ключ с помощью $bar[0] и значение с помощью $bar[1]. ИЛИ, вы можете получить ключ с помощью $bar['key'] и значение с помощью $bar['value']. Это всегда одна пара ключ / значение из исходного массива, она просто дает вам два различных способа доступа к фактическому ключу и фактическому значению.

1 голос
/ 12 февраля 2010

список - это не функция, это языковая конструкция. Используется для присвоения нескольких значений разным переменным.

list($a, $b, $c) = array(1, 2, 3);

Теперь $a равно 1 и т. Д.

Каждый массив имеет внутренний указатель, который указывает на элемент в его массиве. По умолчанию он указывает на начало.

each возвращает текущий ключ и значение из указанного массива, а затем перемещает указатель к следующему значению. Итак, соберите их вместе:

list($key, $val) = each($array);

RHS возвращает массив, который назначен $key и $val. Внутренний указатель в массиве $ перемещается на следующий элемент.

Часто вы видите это в цикле:

while(list($key, $val) = each($array)):

Это в основном то же самое, что и:

foreach($array as $key => $val): 
0 голосов
/ 12 февраля 2010

Использование их вместе - это, по сути, ранний способ перебора ассоциативных массивов, особенно если вы не знали имен ключей массива.

В настоящее время, на самом деле, я не знаю, почему бы не использовать вместо него foreach.

list() может использоваться отдельно от each() для присвоения элементов массива более легко читаемым переменным.

...