Примечание PHP: неопределенный индекс при циклическом массиве - PullRequest
6 голосов
/ 14 марта 2009

Я зацикливаю двумерный массив следующим образом:

if (!empty($aka)) {
    foreach ($aka as $ak) {
        if($ak["lang"]=="es") {
            $sptitle=$ak["title"];
        }
    }
}

Довольно просто. Если массив ($ aka) не пустой, я делаю цикл через него, и когда он обнаруживает, что индекс «lang» равен «es», я просто сохраняю значение «title» для этого индекса в $ sptitle.

Проблема в том, что массив ($ aka) содержит много информации, и иногда отсутствует индекс "lang" ... и я получаю эту ошибку: Примечание: неопределенный индекс: lang.

Как я могу это исправить ???

Это фрагмент массива, который поможет вам понять. Обратите внимание, что [1] не имеет индекса [lang], но [2] имеет:

[1] => Array
    (
        [title] => "The Lord of the Rings: The Motion Picture"
        [year] => ""
        [country] => "USA"
        [comment] => "promotional title"
    )

[2] => Array
    (
        [title] => "Señor de los anillos: La comunidad del anillo, El"
        [year] => ""
        [country] => "Argentina"
        [comment] => "Chile, Mexico, Peru, Spain"
        [lang] => "es"
    )

Спасибо!

Ответы [ 3 ]

15 голосов
/ 14 марта 2009

Просто проверьте его с помощью isset , например,

if (!empty($aka)) {
        foreach ($aka as $ak) {
                if(isset($ak["lang"]) && ($ak["lang"]=="es")) {
                        $sptitle=$ak["title"];
                }
        }
}

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

Вы также можете использовать array_key_exists ('lang', $ aka) вместо isset, хотя у него немного другая семантика - он вернет true, если элемент установлен в null, где isset будет вернуть false.

Интересно, что isset по крайней мере в два раза быстрее, чем array_key_exists , возможно, из-за того, что это языковая конструкция, а не обычный вызов функции.

0 голосов
/ 29 ноября 2011
if (@!empty($aka)) {
        foreach ($aka as $ak) {
                if($ak["lang"]=="es") {
                        $sptitle=$ak["title"];
                }
        }
}

or


if ( @$_POST['value'] == 'yes' ) 
 {
   state;
 }

в большинстве случаев это замечание удаляется с помощью знака @ .............

0 голосов
/ 17 июня 2010

было бы неправильно использовать:

if (@$ak['lang']) 

Мне очень не хватает того факта, что мы все еще не можем сделать 2 проверки в 1, вот так

if ($ak['lang']) 

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

Я не уверен, куда идут разработчики PHP. лично я немного обеспокоен тем, что они превращают PHP во что-то другое. просто оставь это в покое. было здорово.

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