PHP'列表'正在处理非数值数组?

时间:2012-10-14 20:34:31

标签: php list construct

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

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

echo $v . " " . $k

现在上面打印了一个 我很惊讶,因为我认为'list'结构只适用于数值数组。它为什么有效?

2 个答案:

答案 0 :(得分:5)

是的,你是对的list() only works on numerical arrays and assumes the numerical indices start at 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

FROM PHP DOC

  

each返回数组中的当前键和值对并使数组光标前进。

     

each返回数组数组中的当前键和值对。该对以四元素数组返回,其中包含键0,1,键和值。元素0和键包含数组元素的键名,1和值包含数据。

另外

  

each()通常与list()一起用于遍历数组,这是一个例子:

答案 1 :(得分:2)

阅读each()附近的手册:

  

返回数组数组中的当前键和值对。该对以四元素数组返回,其中包含键0,1,键和值。元素0和键包含数组元素的键名,1和值包含数据。

因此,当您执行each($colors)时,将返回以下内容:

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

然后list()获取01的值,并分别将它们分配给$v$k。有意义吗?