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

tes*_*001 3 php list construct

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

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

echo $v . " " . $k
Run Code Online (Sandbox Code Playgroud)

现在上面的打印ra我很惊讶,因为我认为'list'构造只适用于数值数组.它为什么有效?

Bab*_*aba 5

是的你是正确的list()只适用于数值数组,并假设数字索引从0开始.但他解释为什么你的代码正在工作,因为each.

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

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

echo "<pre>";
print_r($bar);
Run Code Online (Sandbox Code Playgroud)

产量

Array
(
    [1] => a
    [value] => a
    [0] => r
    [key] => r
)
Run Code Online (Sandbox Code Playgroud)

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

来自PHP DOC

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

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

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

  • 你太快了:) (2认同)