Nasıl bir foreach döngüsü bir dizi elemanı kaldırabilirim?

4 Cevap php

Ben bir değeri varsa foreach kontrol etmek için bir dizi döngü istiyorum. Değer yoksa, onu içeren eleman silmek istiyorum.

Ben aşağıdaki kodu vardır:

foreach($display_related_tags as $tag_name) {
    if($tag_name == $found_tag['name']) {
        // Delete element
    }
}

Ben değer bulundu sonra eleman silmek için nasıl bilmiyorum. Bunu nasıl silerim?

Ben bu sorun için foreach kullanmak zorunda. Orada foreach alternatifler muhtemelen ve bunları paylaşmak için bekliyoruz.

4 Cevap

Ayrıca anahtarı alırsanız, bu böyle o öğeyi silebilirsiniz:

foreach ($display_related_tags as $key => $tag_name) {
    if($tag_name == $found_tag['name']) {
        unset($display_related_tags[$key]);
    }
}

Bunun yerine dizisinde () döngü foreach yapmanın, bu doğru anahtarı bulmak için () array_search kullanmak daha hızlı olacaktır. Küçük diziler üzerinde, ben daha iyi konuşulduğu için foreach ile gitmek istiyorum, ama daha büyük diziler, ya da sık sık idam kodu için, bu biraz daha iyi olması gerekir:

$result=array_search($unwantedValue,$array,true);
if($result !== false) {
  unset($array[$result]);   
}

Array_search () $ unwantedValue endeksi olarak 0 dönebilirsiniz çünkü sıkı comparsion operatörü! == Gereklidir.

$ UnwantedValue sonra bir kez $ dizi daha oluşabilir Ayrıca, yukarıdaki örnekte, sadece ilk değer $ unwantedValue kaldıracak, sen hepsini bulmak için,) (array_keys kullanmanız gerekir:

$result=array_keys($array,$unwantedValue,true)
foreach($result as $key) {
  unset($array[$key]);
}

http://php.net/manual/en/function.array-search.php daha fazla bilgi için kontrol edin.

Döngüsü "için" "süre" sonraki (), akım () işlevlerini kullanın deneyin.

Yukarıda sözü edildiği gibi, anahtar ile bir foreach yapmak istiyorum, ve unset tuşunu kullanarak ediyorum - ama bu PHP'nin kuralları hakkında emin değilim ama yineleme sırasında bir dizi mutasyona, genel kötü bir fikir olduğuna dikkat hazırlıksız.