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