0

我得到了奇怪的输出

<?php
    $a = array('1000'=>1,2,3,4,'1001'=>5);
    var_dump(array_reverse($a));
?>

我得到这样的输出:

array (size=4)
0 => int 4
1 => int 3
2 => int 5
3 => int 1

缺少值 2。谁能解释一下代码?

4

4 回答 4

3
$a = array('1000'=>1,2,3,4,'1001'=>5);

方法

create key entry 1000 with value 1
create key entry 1000+1 with value 2
create key entry 1000+2 with value 3
create key entry 1000+3 with value 4

然后

create key entry 1001 with value 5

已经存在(值为 2),因此被新值覆盖

于 2013-09-25T10:44:47.997 回答
2

您的原始阵列已经存在“问题”。如果你print_r($a);会看到:

Array
(
    [1000] => 1
    [1001] => 5
    [1002] => 3
    [1003] => 4
)

你可以看到你缺少一个值,因为你覆盖了它:

Index 1000 set value 1.
Index 1001 set value 2.
Index 1002 set value 3.
Index 1003 set value 4.
Index 1001 set value 5. <--- overwritten index 1001
于 2013-09-25T10:44:58.403 回答
1

您的代码工作正常,您从索引 (1000) 开始第一个值,它告诉 PHP 设置以下键,例如,如果我们打印您的数组,它将是这样的:

Array
(
    [1000] => 1
    [1001] => 5
    [1002] => 3
    [1003] => 4
)

和数组反向产生这个:

Array
(
    [0] => 4
    [1] => 3
    [2] => 5
    [3] => 1
)

保留带有第二个参数的键:

 print_r(array_reverse($a,true));

Array
(
    [1003] => 4
    [1002] => 3
    [1001] => 5
    [1000] => 1
)
于 2013-09-25T10:46:01.767 回答
0

当然缺少值 2。看这个

$a = array('1000'=>1,2,3,4,'1001'=>5);

由于值 1 之后的下一个值没有键,所以默认是值 1 的下一个键。所以它应该像这个数组('1000'=>1,'1001'=>2,'1002'= >3,'1003'=>4) 最后一个值是 5,它已经有键 1001。所以它会覆盖以前的值。结果值 2 被值 5 覆盖

于 2013-09-25T10:51:00.070 回答