Aynı döngü içinde modifiye dizi ile foreach döngüsü dizi değiştirilmesi

5 Cevap php
foreach($arrayOne as $value){
    do function
}

Yukarıdaki örnekte, ben bir işlevi olduğunu $ arrayOne bazı unsurları ortadan kaldırır ve döngü yanlış dönünceye kadar sonra sol unsurları azaltılmış $ arrayOne üzerinde döngü geçmek var işletmek var, bir döngü içine $ arrayOne geçmek istiyorum .

Öneriler?

5 Cevap

Eğer, dizi öğelerin değeri değişiklikler yapmak referans kullanmak istiyorsanız. Tamamen dizi öğeleri kaldırmak istiyorsanız, anahtar / değer çiftleri ayrıldı.

$arrayOne = array('example', 'listing of', 'stuff');

foreach ($arrayOne as $key => &$value) {
    $value .= ' alteration';

    if ($value == 'listing of alteration') {
        unset($arrayOne[ $key ]);
    }

}

The above code will add the text " alteration" to the end of each item in the array. It will also remove the second index when it matches "listing of alteration". Tested on PHP 5.2

Sadece bir dizinin bazı unsurları kaldırmak için bir işlev gerekir mı?

Eğer öyleyse, kullanabilirsiniz array_filter.

Tavşan bir foreach döngü içinde unset değerleri ve indeks düzenlemek için başvurular kullanarak doğru cevabı vardır (Seni oy ama bu benim ilk yazı bu yüzden, henüz üzgünüm 15 rep yok)

be sure to remember to use the reference if you pass it through to a function that needs to edit the value as well. You would also need to pass the array as a reference if it's to remove the value from it.

Daha başvurular oluşturarak önlemek için kaldırmak konusunda fonksiyon dönüş boolean yapım tavsiye ederim. örneğin

foreach ($array AS $key => &$value) {
  //& reference only needed if execFunction must edit $value
  if (execFunction(&$value)) { 
    unset($array[$key]);
  } else {
    $value['exec_failed']+=1;
  }
}
unset($value);

Ayrıca $ değer referans böylece firar unset, döngü kapsamında geçmiş devam edecektir.

Eğer dizi birden çok kez döngü istedim sanki son bir düşünce geliyordu. Lütfen döngü yürütme durur nasıl dikkat emin olun.

Ben bir süre döngü bu durumda daha iyi bir bahis olacağını düşünüyorum.

Teşekkürler yardım için herkes. Unset () fonksiyonu, bugünün özel ihtiyaç benim için yararlı olduğunu, sonunda vardır. İşte unset () benim kullanım kısa hikaye:

//array to be processed
$one=array('1','2','3');
//array of terms previously defined as a group to compare against
$against=array('1','2');

foreach($one as $key=>$value){

    //pull out matching terms   
    $match=array_intersect($one,$against);
    //my need is to sum grouped numbers
    $sum=array_sum($match);
    echo $sum."<br />";

    //remove matching terms from original array
    foreach($match as $key=>$value){
    	unset($one[$key]);
    }
}
//now a parent looping function will process the remaining array elements. In this case, the only one left is '3'.