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范围时,不再转换。

  • 相关阅读:
    [Noi2011]阿狸的打字机
    Bzoj3530: [Sdoi2014]数数
    Bzoj2037: [Sdoi2008]Sue的小球
    Bzoj4869: [Shoi2017]相逢是问候
    Bzoj1899: [Zjoi2004]Lunch 午餐
    Bzoj3884: 上帝与集合的正确用法
    UVA10692:Huge Mods
    Bzoj1009: [HNOI2008]GT考试
    Bzoj1212: [HNOI2004]L语言
    【国家集训队2012】tree(伍一鸣)
  • 原文地址:https://www.cnblogs.com/sink_cup/p/php_array_key_string_int.html
Copyright © 2011-2022 走看看