$colors = array(
'r' => 'a',
'g' => 'b',
'b' => 'c'
);
list($v, $k) = each($colors);
echo $v . " " . $k
现在上面打印出我很惊讶的 ra,因为我认为“列表”构造只适用于数值数组。为什么它有效?
是的,您是对的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
each 从数组中返回当前的键值对并推进数组游标。
each 从数组数组中返回当前的键值对。这对以四元素数组的形式返回,键为 0、1、key 和 value。元素 0 和 key 包含数组元素的键名,元素 1 和 value 包含数据。
还
each() 通常与 list() 结合使用来遍历数组,这是一个示例:
仔细阅读手册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
。说得通?