Может ли кто-нибудь сказать мне, почему это не работает должным образом?
<?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 />'; }