【问题标题】:var_dump on interactive mode shows unexpected result交互模式下的 var_dump 显示意外结果
【发布时间】:2016-10-11 15:08:26
【问题描述】:

我在我的 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)

【问题讨论】:

标签: php


【解决方案1】:

这里发生了两件事:

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

所以你的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"
}

【讨论】:

    【解决方案2】:

    类型转换和覆盖示例

    <?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.22.5 被强制转换为2,每个新元素的值将是overwritten,最后分配的值“c”是唯一剩下的值。

    更多信息请点击Type Casting and Overwriting example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多