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