我在php array_reverse()函数中获得了奇怪的输出

时间:2013-09-25 10:39:59

标签: php arrays reverse

我得到了奇怪的输出

<?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 个答案:

答案 0 :(得分: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), 已覆盖 的新值

答案 1 :(得分: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

答案 2 :(得分:1)

您的代码工作正常,您使用index(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
)

答案 3 :(得分:0)

当然,价值2缺失。看看这个

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

由于值1之后的下一个值没有键,所以默认值是值1的下一个键。所以它应该是这样的 阵列( '1000'=大于1, '1001'=大于2, '1002'=→3, '1003'= 1→4) 并且最后一个值是5,其已经具有密钥1001.因此它将覆盖先前的值。结果值2被值5覆盖