2010-11-22 115 views
4

有人可以告诉我为什么这不能按预期工作?为什么这个array_unique不能按预期工作?

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

我得到的结果是:

Woolovers 
Roxio 

BandQ 


Big Bathroom Shop 

Robert Dyas 

我要的是重复的了:|

回答

11

首先,你应该在循环之前调用它,因为它只需要过滤一次。

其次,当你使用array_unique()密钥将被保留,所以PHP是通过数组中不再视为存在的指标试图循环,并可能在年底会错过一些列以及因为count($merchant_array)现在返回一个较小的值。首先需要重置密钥(使用array_values()),然后对其进行循环。

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

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

另外,使用foreach循环跳过array_values()电话:

$merchant_array = array_unique($merchant_array); 

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

哇...感谢这么多的解释和代码!像一种享受。 – 2010-11-22 03:08:29

相关问题