2010-11-22 20 views
4

Kann mir jemand sagen, warum das nicht wie erwartet funktioniert?Warum funktioniert dieses array_unique nicht wie erwartet?

<?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 />'; 
     } 
?> 

Die Ergebnisse, die ich bekommen ist:

Woolovers 
Roxio 

BandQ 


Big Bathroom Shop 

Robert Dyas 

Alles, was ich will, ist die Duplikate weg: |

Antwort

11

Zuerst sollten Sie es vor der Schleife aufrufen, da es nur einmal gefiltert werden muss.

Zweitens werden Schlüssel beibehalten, wenn Sie array_unique() verwenden, also versucht PHP, nicht mehr existierende Indizes in Ihrem Array zu durchlaufen, und könnte auch am Ende etwas auslassen, weil count($merchant_array) jetzt einen kleineren Wert zurückgibt. Sie müssen zuerst die Tasten zurücksetzen (mit array_values()), dann wiederholen Sie die Schleife.

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

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

Alternativ verwenden Sie eine foreach-Schleife die array_values() Aufruf überspringen:

$merchant_array = array_unique($merchant_array); 

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

Woah ... Vielen Dank für die Erklärung und den Code! Funktioniert wie ein Leckerbissen. –

Verwandte Themen