Почему этот array_unique не работает должным образом? - PullRequest
4 голосов
/ 22 ноября 2010

Может кто-нибудь сказать мне, почему это не работает, как ожидалось?

<?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 голосов
/ 22 ноября 2010

Во-первых, вы должны вызывать его перед циклом, поскольку его нужно отфильтровать только один раз.

Во-вторых, ключи сохраняются при использовании 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 />';
  }
...