2011-10-15 52 views
0

可能重複:
PHP String in Array Only Returns First Character奇怪的PHP數組行爲

我有以下問題。當我在下面運行腳本時,我得到了字符串(1)「F」作爲輸出。這怎麼可能?沒有錯誤,通知顯示..什麼都沒有。鍵$ c中不存在的任何內容。你能解釋一下嗎?

<?php 
    $c = 'FEEDBACK_REGISTER_ACTIVATION_COMPLETED_MSG'; 
    var_dump ($c['whatever']); 
    ?> 

我在PHP 5.3.3上遇到這個問題。 (LINUX)

+0

奇怪的標題,你有你的問題。 – hakre

回答

3

PHP可以讓你對字符串指數:

$str = "Hello, world!"; 
echo $str[0]; // H 
echo $str[3]; // l 

PHP也將字符串轉換爲整數含蓄,但是當它出現故障時,使用零:

$str = "1"; 
echo $str + 1; // 2 
$str = "invalid"; 
echo $str + 1; // 1 

那麼它試圖做是字符串的索引,但索引不是整數,因此它試圖將字符串轉換爲整數,產生零,然後它訪問字符串的第一個字符,恰好是F.

+0

爲什麼它試圖將「無論」轉換爲整數?這背後有什麼想法? – basstradamus

+0

@basstradamus:我假設PHP開發者這樣做是因爲如果你有一個字符串表示一個數字,比如說'$ _GET',並且你想給它添加一個數字,許多初學者會希望它不需要轉換類型之間。這裏是[PHP文檔](http://us2.php.net/manual/en/language.types.string.php#language.types.string.conversion)。 – icktoofay

+0

換句話說,當變量不是一個數組而是字符串時,通過關聯鍵訪問它將導致將鍵轉換爲整數類型。這是非常重要的結論,因爲isset($ c ['whatever'])將返回TRUE! array_key_exists在這裏是必須的。感謝提示icktoofay。 – basstradamus

0

通過PHP的魔術型鑄造時的關聯數組找不到索引,索引本身被轉換成整數0,因此它是像 如果

$sample = 'Sample'; 

$sample['anystring'] = $sample[0]; 

因此,如果O/P是「S」;