交互模式下的var_dump显示意外结果

时间:2016-06-10 15:18:42

标签: php

我在我的shell(ubuntu 12)上遇到了一种奇怪的行为,我无法解释:

  

var_dump(array(1.5 =>" a",2.2 =>" b",2.5 =>" c"));

在我的shell中打印以下内容:

array(2) {
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "c"
}

有人可以解释一下吗?怎么了" b"?为什么不打印? (PHP 5.3)

2 个答案:

答案 0 :(得分:6)

这里有两件事:

  1. 数组键只能是字符串或整数。浮点数将转换成整数。
  2. 如果数组声明中的多个元素使用相同的键,则只会使用最后一个元素,因为所有其他元素都会被覆盖。
  3. 因此,您的2.22.5键被转换为整数2。第二个覆盖了第一个。

    http://php.net/manual/en/language.types.array.php#example-99

    一种选择是使用字符串键:

    var_dump(array("1.5" => "a", "2.2" => "b", "2.5" => "c"));
    
    array(3) {
      '1.5' =>
      string(1) "a"
      '2.2' =>
      string(1) "b"
      '2.5' =>
      string(1) "c"
    }
    

答案 1 :(得分:0)

输入转换和覆盖示例

<?php
$array = array(
    1    => "a",
    2.2  => "b",
    2.5  => "c",
);
var_dump($array);
?>

以上示例将输出

array(2) {
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "c"
}

如上例2.2&amp; 2.5投放到2,每个新元素的值为overwritten,最后一个值为#34; c&#34;是剩下的唯一一个。

有关详情,请点击Type Casting and Overwriting example