2010-12-17 25 views
4

我一直有相當大的麻煩,試圖找出爲什麼我的數組沒有按預期工作。我在功能上使用的代碼與下面的代碼相同,但是在我的程序中它默默無聞,所以我編寫了一個使用相同類型數據和語法的獨立測試用例,並獲得了有關非法偏移類型的錯誤。PHP「警告:非法偏移類型在...」陣列問題讓我難住

Warning: Illegal offset type in <file location>\example.php on line 12 
Warning: Illegal offset type in <file location>\example.php on line 16 

這些指的是專門包含對「$ questions [$ question]」的引用的兩行。

<?php 
    $questions = array(
     "訓読み: 玉"=>array("たま","だま"), 
     "訓読み: 立"=>array("たて","たち","たつ","たてる","だてる","だて"), 
    ); 

    $question = $questions["訓読み: 立"]; 

    if (is_array($questions[$question])){ 
     $res = $questions[$question][0]; 
    } else { 
     $res = $questions[$question]; 
    } 
    echo $res; 
?> 

我想我只是超出了我的技能水平在這裏,因爲雖然我可以看到,指出「數組和對象不能被用作鑰匙上http://php.net/manual/en/language.types.array.php警告這樣做會導致一個警告:非法抵消類型。「,我看不出我在做什麼與在那個頁面上的例子#7有什麼不同。

我將不勝感激解釋,這將有助於我理解和解決我的問題。

預先感謝您!

回答

0

他們不會在手冊頁上這樣做,據我所知。你不能使用數組作爲鍵。

2

當您調用$question = $questions["訓読み: 立"];時,您正在接收由該字符串表示的數組。當您使用$問題[$問題],你應該只使用$問題:

<?php 
    $questions = array(
     "訓読み: 玉"=>array("たま","だま"), 
     "訓読み: 立"=>array("たて","たち","たつ","たてる","だてる","だて"), 
    ); 

    $question = $questions["訓読み: 立"]; 

    if (is_array($question)){ 
     $res = $question[0]; 
    } else { 
     $res = $question; 
    } 
    echo $res; 
?> 
+0

謝謝你,這確實修復與特定代碼段的問題,並給了我一個小更深入地瞭解如何工作的。不幸的是,我原來遇到的較大的代碼仍然不起作用...... :(我會繼續挖掘它,看看我能否取得更多進展。 – 2010-12-18 00:24:40

1

擺脫的警告,你必須使用array_key_exists
應該看起來像那些callind is_array之前額外的檢查:

if (array_key_exists($question,$questions) && is_array($questions[$question])) 

它應該做的工作

相關問題