2010-11-22 23 views
4

Herkes bunun neden beklendiği gibi çalışmadığını söyleyebilir mi? Ben olsunBu array_unique neden beklendiği gibi çalışmıyor?

<?php 
     $merchant_string = '123-Reg|Woolovers|Roxio|Roxio|BandQ|Roxio|Roxio|Big Bathroom Shop|Roxio|Robert Dyas|Roxio|Roxio|PriceMinister UK|Cheap Suites|Kaspersky|Argos|Argos|SuperFit|PriceMinister UK|Roxio|123-Reg';  

     $merchant_array = explode('|', $merchant_string); 

     for($i = 0; $i<count($merchant_array); $i++) 
     { 
      $merchant_array = array_unique($merchant_array); 

      echo $merchant_array[$i] . '<br />'; 
     } 
?> 

sonuç geçerli:

Woolovers 
Roxio 

BandQ 


Big Bathroom Shop 

Robert Dyas 

Tek istediğim çiftleri gitmiş geçerli: |

cevap

11

İlk olarak, yalnızca bir kez filtrelenmesi gerektiğinden, döngüden önce çağırmalısınız. Eğer array_unique() kullandığınızda

İkincisi, anahtarlar korunur, böylece PHP sizin dizideki, artık varolmayan endeksleri döngü çalışıyor ve count($merchant_array) şimdi daha küçük bir değer döndürür çünkü hem sonunda bazı kaçırabilirsiniz. Önce anahtarları (array_values() kullanarak) sıfırlamanız ve sonra onu döngülemeniz gerekir. Alternatif

$merchant_array = array_values(array_unique($merchant_array)); 

    for($i = 0; $i<count($merchant_array); $i++) 
    { 
     echo $merchant_array[$i] . '<br />'; 
    } 

, array_values() aramayı atlamak için bir foreach döngüsü kullanın:

$merchant_array = array_unique($merchant_array); 

    foreach ($merchant_array as $merchant) { 
     echo $merchant . '<br />'; 
    } 
+0

Whoahh ... açıklama ve kod için çok teşekkür ederiz! Bir tedavi gibi çalışır. –

İlgili konular