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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM