细节:php array会把string key自动转成int吗?
PHP array和别的语言不一样。PHP数组的key可以为int,也可以为string,引申出下面的问题。
<?php
$a = array(
1 => 'as',
2 => '22',
);
var_dump($a);
var_dump($a);
var_dump($a['2']);
exit;
?>
结果:$a未定义,$a 与 $a['2']相同。
<?php
$a = array(
'1' => 'as',
'2' => '22',
);
var_dump($a);
var_dump($a);
var_dump($a['2']);
exit;
结果:$a未定义,$a 与 $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范围时,不再转换。
页:
[1]