我一直在努力弄清楚为什么我的阵列没有按预期工作。我在函数上使用的代码与下面的代码相同,但它在我的程序中默默地失败了,所以我使用相同类型的数据和语法编写了一个独立的测试用例,并得到了关于非法偏移类型的错误。
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["訓読み: 立"];
时,您正在接收该字符串所代表的数组。当你使用$ 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)
就我所见,他们在手册页上没有这样做。您不能将数组用作键。