Почему этот массив не работает так, как ожидалось?

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

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

Все, что мне нужно, это дубликаты: |

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

    Во-вторых, ключи сохраняются, когда вы используете array_unique() , поэтому PHP пытается зациклиться на более длинных индексах в вашем массиве и может пропустить некоторые из них в конце, а также потому, что count($merchant_array) теперь возвращает меньшее значение , Сначала нужно сбросить ключи (используя array_values() ), а затем 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 />'; }