[php]小知识php数组key类型

PHP array和别的语言不一样。

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

$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’]相同。

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

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

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

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

结果:输出int。

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

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

$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);
}

结论:php的int取值范围与系统有关,在int的有效范围内,php array会把数字字符串的key转成int;当key超过int范围时,不再转换。
如果是字符串刚好可以转为ini型,作为key时可能会到意想不到的坑。

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*