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时可能会到意想不到的坑。