Проблемы с массивом в PHP "Предупреждение: недопустимый тип смещения в ..." - PullRequest
5 голосов
/ 18 декабря 2010

У меня были значительные проблемы, пытаясь выяснить, почему мои массивы не работали так, как ожидалось. Функционально я использовал код, аналогичный приведенному ниже, но в моей программе он не работал, поэтому я написал отдельный тестовый пример, используя те же типы данных и синтаксис, и получил ошибки о недопустимых типах смещения.

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 ]

2 голосов
/ 18 декабря 2010

Когда вы вызываете $question = $questions["訓読み: 立"];, вы получаете массив, представленный этой строкой.Когда вы используете $ questions [$ question], вы просто должны использовать $ question:

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

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

    if (is_array($question)){
        $res = $question[0];
    } else {
        $res = $question;
    }
    echo $res;
?>
2 голосов
/ 22 декабря 2010

, чтобы избавиться от предупреждения, вы должны сделать дополнительную проверку перед callind is_array, используя array_key_exists
это должно выглядеть примерно так:

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

это должно сделать работу

0 голосов
/ 18 декабря 2010

На странице руководства они не делают этого, насколько я вижу. Вы не можете использовать массивы в качестве ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...