3
  $colors = array(
    'r' => 'a',
    'g' => 'b',
    'b' => 'c'
);

list($v, $k) = each($colors);

echo $v . " " . $k

现在上面打印出我很惊讶的 ra,因为我认为“列表”构造只适用于数值数组。为什么它有效?

4

2 回答 2

5

是的,您是对的list() 仅适用于数字数组并假设数字索引从 0 开始。但他之所以能解释为什么您的代码可以正常工作是因为each.

each traverse an array因此,如果您运行以下命令,则将其转换keys为示例:numerical

$foo = array("r"=>"a");
$bar = each($foo);

echo "<pre>";
print_r($bar);

输出

Array
(
    [1] => a
    [value] => a
    [0] => r
    [key] => r
)

您可以使用 array('r' => 'a');已转换为的,array(0 => 'r', 1 => 'a');因此您现在可以使用,list因为它们现在有numerical keys

来自 PHP 文档

each 从数组中返回当前的键值对并推进数组游标。

each 从数组数组中返回当前的键值对。这对以四元素数组的形式返回,键为 0、1、key 和 value。元素 0 和 key 包含数组元素的键名,元素 1 和 value 包含数据。

each() 通常与 list() 结合使用来遍历数组,这是一个示例:

于 2012-10-14T20:38:24.660 回答
2

仔细阅读手册each()

从数组数组中返回当前的键值对。这对以四元素数组的形式返回,键为 0、1、key 和 value。元素 0 和 key 包含数组元素的键名,元素 1 和 value 包含数据。

因此,当您这样做时each($colors),将返回以下内容:

array(0 => 'r' => 1 => 'a', 'key' => 'r', 'value' => 'a')

然后list()获取和的值0并将1它们分别分配给$v$k。说得通?

于 2012-10-14T20:39:28.507 回答