2009-04-24 16 views
6

Böyle bir şey yapmak istiyorum:PHP'de "foreach x except y" yapmanın en zarif yolu nedir?

foreach ($array as $key=>$value except when $key="id") 
{ 
// whatever 

} 

... döngünün vücudun içinde bir "eğer" maddesi koymak zorunda kalmadan. Dizideki ilk ya da son elemanın "id" olması garanti edilmez ve diziyi gerçekten düzeltmek ya da kesmek istemiyorum çünkü bu, pahalı, çirkin olacak ve orijinal verileri koruyamayacak. Ayrıca, döngü içinde hem anahtar hem de değer kullanmam gerekiyor.

Herhangi bir fikrin var mı?

cevap

14

Ben eğer-fıkra böyle bir sorun olduğunu sanmıyorum: If- ile

$loop_array = array_diff_key($actual_array, array('ignore_me' => NULL, 'ignore_me_2' => NULL)); 
foreach ($loop_array as $key => $value) { 
    #... 
+1

hangi çalışmalı, ancak bir yığın daha fazla bellek gerektirir çünkü bu dizinin başka bir kopyasını oluşturur. – Alnitak

+0

pahalı görünüyor ... – Thilo

+0

Evet, bunu yansıtmak için değiştirilmiş bir cevap. – soulmerge

2

Sanırım her zaman iç döngüde bir IF deyimi kullanacaksınız. Zaten verdi tüm seçeneği arasında, ben döngü içinde bir if olmadan hız ve hafıza tüketimi bunu yapamaz AFAIK

1

için kullanacağı tek kişi o.

Anahtar kelimenin dediği gibi, "her biri için", "çoğu için" değil.

DÜZENLEME: soulmerge yazdığı gibi, senarray_diff_key() bile yaparım , ama sadece tek bir tuşa kaçırıyorsunuz eğer sadece döngü içinde if koyarak daha ayrıntılı ve daha az bellek etkili.

5

Git: Bir fantezi çözüm istiyorsanız

foreach ($array as $key => $value) { 
    if ($key == 'ignore_me') continue; 
    if ($key == 'ignore_me_2') continue; 

kullanabileceğiniz array_diff_key döngü içindeki cümlecik. Bu konuda yetersiz bir şey yok, okumak ve anlamak en kolay ve en verimli. Eğer (if-yan tümcesinde) karşı test etmek için bir ikinci karma inşa edebileceğini atlamak için çok anahtarı varsa

:

foreach ($array as $key => $value) { 
    if (array_key_exists($key,$skip_keys)) continue; 
    ... 
} 
0

if deyimi sıkışan bir diğer yolu ise:

// ignore 1,5,8,9 
foreach($arr as $key){ 
    if(in_array($key, array(1,5,8,9)) continue; 
    ... 
} 
İlgili konular