2013-04-22 21 views
1

當:關鍵始終計算爲第一個字符(真)

$person = array('name' => 'bill'); 

isset($person['jibberish'])爲FALSE。

但是:

$person = 'bill'; 

isset($person['jibberish'])計算爲TRUE,爲$person['jibberish']返回字符串$人的第一個字符。

這是否符合預期?這對我來說今天是令人震驚的,因爲我一直使用empty($array['key'])而沒有在我的if語句中包含is_array()

+0

這是PHP與字符串>整型的未100%-obvious行爲的一個很好的例子鑄件。試試'$ person ='bill'; var_dump(isset($ person ['10 green bottles']));' - 參見http://php.net/manual/en/language.types.type-juggling.php和http://php.net/manual /en/language.types.string.php#language.types.string.substr作爲你看到這種行爲的關鍵。你需要記住的是你正在處理下面的C字符串,所以一切都只是一個字節數組。 – DaveRandom 2013-04-22 16:21:42

+0

任何以數字開頭的字符串在將類型轉換爲int時都會成爲該數字,因此(int)'10綠色瓶子'== 10; // true。如果它不以數字開頭,它將被轉換爲0。 – fullybaked 2013-04-22 16:28:08

回答

3

因爲$person是一個字符串,所以類似於數組的索引轉換爲int

(int)'any non-numeric string in the world' == 0 

所以,你如果你使用一個隨機,非數字的字符串作爲指數「自然」得到任何字符串的第一個字符。

1

因爲您正在打印未定義的字符串索引,而不是數組。 如果您嘗試打印字符串的指標在PHP中,你將有串的每個字符:

$person = 'bill'; 
$person[0] //b 
$person[1] //i 
$person[2] //l 
$person[3] //l