PHP Notice: dizi loop sırasında endeksi Undefined

3 Cevap php

Ben böyle iki boyutlu bir dizi döngü ediyorum:

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

Oldukça basit. Array ($ aka) boş ben döngü yalak değilse ve "lang" index "es" Ben sadece $ sptitle o dizin için "title" değerini kaydetmek için eşit olduğunu bulur.

Notice: Undefined index: sorunu array ($ aka) pek çok bilgi içerir ve bazen hayır "lang" index ... ve ben bu hatayı alıyorum olduğunu lang.

Bunu nasıl düzeltebilirim??

Bu anlamak için dizinin bir özüdür. [1] [lang] dizin yok ama [2] var dikkat edin:

[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"
    )

Teşekkürler!

3 Cevap

Sadece isset, örneğin, ile birlikte bunun için test

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

Eğer gibi nasıl bir mantıksal operatörü farkında iseniz && ilk işlenen yanlış ise, o zaman ikinci işlenen değerlendirmeye alınmayacaktır, kısa devre olabilir. Sık sık bu deyim ikinci işlenen bunun üzerine harekete geçmeden önce bir şey availablilty kontrol istihdam görürsünüz.

Ayrıca yerine isset array_key_exists ('lang', $ aka) kullanabilirsiniz, bu olsa biraz farklı sözcüklerle var - bir öğe null, whereis isset ayarlı ise true döndürecektir false dönecekti.

İlginç bir şekilde, isset is at least twice as fast as array_key_exists, muhtemelen nedeniyle oldukça normal bir işlev çağrısı göre bir dil oluşumu olduğu gerçeğine.

Bu kullanım yanlış olur:

if (@$ak['lang']) 

i gerçekten biz hala gibi 1'de 2 kontrolleri yapamayacağı gerçeğini özledim

if ($ak['lang']) 

PHP hakkında güzel şeylerden biri oldu ve ben sadece bir dizi anahtarı PHP gibi geçici bir betik dili olarak başlatıldı olup olmadığını uyarı amacını görmüyorum.

Ben PHP geliştiricileri ile bu nereye emin değilim. Şahsen, onlar başka bir şey içine PHP geçişin konum biraz endişeliyim. sadece yalnız bırakın. harikaydı.

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

or


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

Çoğu durumda bu @ işaretini kullanarak kaldırıldı fark ettim .............