Por que esse Array_unique não funciona como esperado?
-
27-09-2019 - |
Pergunta
Alguém pode me dizer por que isso não funciona como esperado?
<?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 />';
}
?>
Os resultados que obtive é:
Woolovers
Roxio
BandQ
Big Bathroom Shop
Robert Dyas
Tudo que eu quero é que as duplicatas se foram: |
Solução
Primeiro, você deve chamá -lo antes do loop, pois ele só precisa ser filtrado uma vez.
Segundo, as chaves são preservadas quando você usa array_unique()
, então o PHP está tentando fazer um loop através de índices não existentes em sua matriz e pode perder alguns no final também porque count($merchant_array)
agora retorna um valor menor. Você precisa redefinir as chaves primeiro (usando array_values()
), em seguida, faça um loop.
$merchant_array = array_values(array_unique($merchant_array));
for($i = 0; $i<count($merchant_array); $i++)
{
echo $merchant_array[$i] . '<br />';
}
Como alternativa, use um loop foreach para pular o array_values()
ligar:
$merchant_array = array_unique($merchant_array);
foreach ($merchant_array as $merchant) {
echo $merchant . '<br />';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow