【问题标题】:Why doesn't this array_unique work as expected?为什么这个 array_unique 不能按预期工作?
【发布时间】:2010-11-22 02:57:35
【问题描述】:

谁能告诉我为什么这不能按预期工作?

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

我想要的只是重复的消失:|

【问题讨论】:

    标签: php arrays duplicates array-unique


    【解决方案1】:

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

    其次,当您使用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 />';
      }
    

    【讨论】:

    • 哇...非常感谢您的解释和代码!像一种享受一样工作。
    最近更新 更多