代码之家  ›  专栏  ›  技术社区  ›  Nambi

我在php arrayreverse()函数中得到了奇怪的输出

  •  0
  • Nambi  · 技术社区  · 11 年前

    我得到了奇怪的输出

    <?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 回复  |  直到 8 年前
        1
  •  3
  •   Mark Baker    11 年前
    $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),也是 覆盖的 使用新值

        2
  •  2
  •   Glavić    11 年前

    您的原始数组已经存在“问题”。如果你 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
    
        3
  •  1
  •   Jason OOO    11 年前

    您的代码工作正常,您用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
    )
    
        4
  •  0
  •   david    11 年前

    当然,缺少值2。看看这个

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

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