"Y hariç foreach x" yapmak için en zarif yolu nedir

5 Cevap php

Ben böyle bir şey yapmak istiyorum:

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

}

... Döngü gövdesi içinde bir "eğer" maddesi koymak zorunda kalmadan. Bu "id" dizisindeki ilk veya son unsur olacağı garanti edilmez, ve ben gerçekten unset istiyorum veya dizi dilim, pahalı olması, çirkin olacak çünkü, ve orijinal verileri korumak değil yok. Ben de kesinlikle döngü içinde anahtar ve değer hem de kullanmanız gerekir.

Herhangi bir fikir?

5 Cevap

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

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

Bir fantezi çözüm istiyorsanız, kullanabileceğiniz array_diff_key yapabilirsiniz:

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

Go with the if-clause inside the loop. There is nothing inelegant about it, it is the easiest to read and understand, and it is the most efficient.

Eğer atlamak için birçok anahtarları varsa (eğer-fıkra olarak) karşı test etmek için ikinci bir karma oluşturmak olabilir:

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

Ben her zaman iç döngüde bir IF fıkra kullanmanız bitireceğiz düşünüyorum. Zaten verdi tüm seçenekleri, ben hız için kullanmak istiyorsunuz tek ve bellek tüketimi var

AFAIK Eğer döngü içinde bir if olmadan bunu yapamaz.

Anahtar kelime söyler gibi, "çoğu için", "her biri için" değil.

EDIT: soulmerge diyor gibi, could array_diff_key() ile bunu, ama tek bir tuşa eksik eğer daha ayrıntılı ve daha az bellek daha verimli sadece döngüde if koyarak.

if deyimi sıkıştırılması başka yoludur:

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