【问题标题】:Why PHP treating "1" as integer in array_merge()为什么 PHP 在 array_merge() 中将“1”视为整数
【发布时间】:2014-07-28 09:46:03
【问题描述】:

为什么 PHP 在array_merge() 中将“1”视为整数

例如

$arr1 = array( "1"=>1, 2 , 3 );
$arr2 = array( "1"=>1, 2 );
print_r(array_merge( $arr1 , $arr2 ));
var_dump("1");
var_dump(1);

输出:

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

string(1) "1" int(1) 

根据array_merge() 函数:- 如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。

【问题讨论】:

    标签: php arrays array-merge


    【解决方案1】:

    这与 array_merge() 无关,而是与 PHP 如何处理数组键有关。请参阅 http://php.net/manual/en/language.types.array.php 以了解键的隐式转换。

    【讨论】:

      【解决方案2】:

      您根本不应该将数值用作字符串键,因为它们被视为数字键。

      在这种情况下最重要的是:

      包含有效整数的字符串将被转换为整数类型。 例如。密钥“8”实际上将存储在 8 之下。另一方面 "08" 不会被强制转换,因为它不是有效的十进制整数。

      以上内容与PHP Arrays manual中的PHP数组有关

      您可以使用此示例代码查看它:

      $arr1 = array( "1"=>1, "01" => 4,  2 , 3 );
      
      var_dump($arr1);
      

      它会返回:

      array(4) { 1=> int(1) ["01"]=> int(4) [2]=> int(2) [3]=> int(3) }

      所以你的键 "1" 变成了数字键,但键 "01" 仍然是字符串键

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-09
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多