2013-06-07 9 views
8

Varsa:Kontrol birkaç PHP dizi anahtarları tüm Şu anda aşağıdaki kullanıyorum

$a = array('foo' => 'bar', 'bar' => 'foo'); 

    if(isset($a['foo']) && isset($a['bar'])){ 
     echo 'all exist'; 
    } 

Ancak, ben kontrol edilmelidir birkaç fazla dizi foo den tuşları ve bar sahip olacaktır. Gereken her bir anahtarın, her bir giriş için isset eklenmesinden daha etkili bir yolu var mı?

+0

olası yinelenen bayrağı görmezden olduğu; Ben sadece ince farkı fark ettim. –

cevap

23

Tek isset() çağrısında birleştirebilirsiniz: Eğer gerekli tüm tuşları bir dizi varsa

if (isset($a['foo'], $a['bar']) { 
    echo 'all exist'; 
} 

, yapabileceğiniz:

if (count(array_diff($required_keys, array_keys($a))) == 0) { 
    echo 'all exist'; 
} 
+0

Hata alma: 'Yazma işlevinde işlev döndürme değerini kullanamıyor 'satırı için (eğer boş (array_diff ($ required_keys, array_keys ($ a))) {'. – Mooseman

+0

Görünüşe göre boş() 'argümanını gerektirir değişken olarak değil, bir ifade olmak için kullanılır. saymak için kullanılır() '. – Barmar

+0

Sadece neye ihtiyacım var. Teşekkürler! – Mooseman

1

Bir dizi oluşturabilir Kontrol etmek istediğiniz tüm girişlerin ardından, hepsinin üzerinde yineleyin.

$entries = array("foo", "bar", "baz"); 
$allPassed = true; 

foreach($entries as $entry) 
{ 
    if(!isset($a[$entry])) 
    { 
     $allPassed = false; 
     break; 
    } 
} 

$ allPassed = true ise, hepsi iyi - yanlış bir veya daha fazla başarısız oldu demektir.

0

Muhtemelen en temiz

if (array_diff(['foo', 'bar'], array_keys($a))) === []) { 
    echo 'all exist'; 
} 
İlgili konular