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范圍時,不再轉換。
