¿Por qué no hace este trabajo array_unique como se esperaba?
-
27-09-2019 - |
Pregunta
¿Alguien puede decirme por qué esto no funciona como se esperaba?
<?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 />';
}
?>
Los resultados que obtengo es:
Woolovers
Roxio
BandQ
Big Bathroom Shop
Robert Dyas
Todo lo que quiero es los duplicados desaparecido: |
Solución
En primer lugar, usted debe estar llamando antes de que el bucle ya que sólo necesita ser filtrada una vez.
En segundo lugar, las claves se conservan cuando se utiliza array_unique()
, por lo que PHP está intentando colocar a través de índices que ya no existe en la matriz, y puede pasar por alto algunos al final, así porque count($merchant_array)
ahora devuelve un valor menor. Es necesario para restablecer las claves primero (usando array_values()
), entonces bucle.
$merchant_array = array_values(array_unique($merchant_array));
for($i = 0; $i<count($merchant_array); $i++)
{
echo $merchant_array[$i] . '<br />';
}
Alternativamente, utilice un bucle foreach para omitir la llamada array_values()
:
$merchant_array = array_unique($merchant_array);
foreach ($merchant_array as $merchant) {
echo $merchant . '<br />';
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow