each()和list()函数

时间:2010-02-11 23:56:23

标签: php iterator

我不太了解each()和list()函数。任何人都可以给我一些细节,并向我解释它是如何有用的?

修改

<?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 个答案:

答案 0 :(得分:5)

each()函数返回当前元素键和值,并向前移动内部指针。 each()

list函数 - 将变量分配为数组 list()

示例用法是通过数组迭代

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

    }

答案 1 :(得分:5)

list本身不是一个函数,因为它的使用方式完全不同。

假设你有一个数组

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

使用list,您可以快速将这些不同的数组成员分配给变量

list($item1, $item2) = $arr; //$item1 equals 'Hello' and $item2 equals 'World'

答案 2 :(得分:2)

list的一个非常常见的例子是考虑CSV文件。想象一下,您有一个简单的数据库存储为CSV,其中包含idtitletext列,这样的文件可能如下所示:

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

答案 3 :(得分:2)

编辑:可能值得注意的是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()指针重置为第一个元素。

答案 4 :(得分:1)

list不是函数,它是一种语言结构。它用于为不同的变量分配多个值。

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

现在$a等于1,依此类推。

每个数组都有一个指向其数组中元素的内部指针。默认情况下,它指向开头。

each返回指定数组中的当前键和值,然后将指针前进到下一个值。所以,把它们放在一起:

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

RHS返回一个数组,该数组已分配给$key$val。 `$ array'中的内部指针被移动到下一个元素。

通常你会在循环中看到它:

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

它基本上与:

相同
foreach($array as $key => $val): 

答案 5 :(得分:1)

要在第一次编辑中回答问题:

基本上,PHP正在创建一个混合数组,其中包含来自源数组中当前元素的键/值对。

因此,您可以使用$bar[0]获取密钥,使用$bar[1]获取值。或者,您可以使用$bar['key']获取密钥,使用$bar['value']获取值。它始终是源数组中的单个键/值对,它只是为您提供了两种不同的访问实际键和实际值的途径。

答案 6 :(得分:1)

假设你有一个多维数组:

+---+------+-------+
|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;
}
?>

答案 7 :(得分:0)

基本上,将它们结合使用是迭代关联数组的早期方法,特别是如果您不知道数组键的名称。

如今我真的没有理由不使用foreach代替。

list()可以与each()分开使用,以便将数组的元素分配给更易于阅读的变量。