为什么这个array_unique函数不能按预期工作?

4

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

<?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

我只想把重复的东西都清除掉 :|
1个回答

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

哇……非常感谢您的解释和代码!运行得非常好。 - Keith Donegan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接