PHP“警告:非法偏移类型...”数组问题让我感到难过

时间:2010-12-17 23:27:50

标签: php multidimensional-array

我一直在努力弄清楚为什么我的阵列没有按预期工作。我在函数上使用的代码与下面的代码相同,但它在我的程序中默默地失败了,所以我使用相同类型的数据和语法编写了一个独立的测试用例,并得到了关于非法偏移类型的错误。

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有什么不同。

我非常感谢能够帮助我理解并解决我的问题的解释。

提前谢谢!

3 个答案:

答案 0 :(得分:2)

当您致电$question = $questions["訓読み: 立"];时,您正在接收该字符串所代表的数组。当你使用$ questions [$ question]时,你应该只使用$ question:

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

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

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

答案 1 :(得分:2)

要摆脱警告你必须在callind is_array之前使用array_key_exists进行额外的检查
看起来应该是这样的:

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

它应该完成这项工作

答案 2 :(得分:0)

就我所见,他们在手册页上没有这样做。您不能将数组用作键。