zoukankan      html  css  js  c++  java
  • 细节:php array会把string key自动转成int吗?

    PHP array和别的语言不一样。

    PHP数组的key可以为int,也可以为string,引申出下面的问题。

    <?php
    $a = array(
        1 => 'as',
        2 => '22',
    );
    var_dump($a[0]);
    var_dump($a[2]);
    var_dump($a['2']);
    exit;
    ?>
    

    结果:$a[0]未定义,$a[2] 与 $a['2']相同。

    <?php
    $a = array(
        '1' => 'as',
        '2' => '22',
    );
    var_dump($a[0]);
    var_dump($a[2]);
    var_dump($a['2']);
    exit;
    

    结果:$a[0]未定义,$a[2] 与 $a['2']相同。

    问题:string作为key,然后输出是string还是int。

    <?php
    $a = array(
        '1' => 'as',
        '2' => '22',
    );
    foreach($a as $k=>$v) {
        if($k === 1) {
            echo 'int';
        }
    }
    exit;
    

    结果:输出int。

    问题:现在可以得出结论说php array会自动把数字字符串的key转成int?请看下面的例子。

    参考:http://www.cnblogs.com/sink_cup/archive/2010/12/12/php_intval_mysql_int.html

    <?php
    $a = array(
        'asdf' => 'a',
        '2' => '22',
        '2147483647' => '32 max',
        '2147483648' => '32 max + 1',
        '9223372036854775807' => '64 max',
        '9223372036854775808' => '64 max + 1',
        9223372036854775809 => '64 max + 2',
    );
    foreach($a as $k=>$v) {
            var_dump($k);
            echo ' ';
            var_dump($v);
    }
    exit;
    

    在64位的机器上输出:

    string(4) "asdf"
     string(1) "a"
    int(2)
     string(2) "22"
    int(2147483647)
     string(6) "32 max"
    int(2147483648)
     string(10) "32 max + 1"
    int(9223372036854775807)
     string(6) "64 max"
    string(19) "9223372036854775808"
     string(10) "64 max + 1"
    int(-9223372036854775808)
     string(10) "64 max + 2"
    

    结论:php的int取值范围与系统有关,在int的有效范围内,php array会把数字字符串的key转成int;当key超过int范围时,不再转换。

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/sink_cup/p/php_array_key_string_int.html
Copyright © 2011-2022 走看看