Почему этот array_unique не работает должным образом?
-
27-09-2019 - |
Вопрос
Кто-нибудь может сказать мне, почему это не работает должным образом?
<?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()
), затем петлю его.
$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 />';
}
Не связан с StackOverflow