Perché non fa questo lavoro array_unique come previsto?
-
27-09-2019 - |
Domanda
Qualcuno può dirmi perché questo non funziona come previsto?
<?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 />';
}
?>
I risultati che ottengo è:
Woolovers
Roxio
BandQ
Big Bathroom Shop
Robert Dyas
Tutto quello che voglio è i duplicati spariti: |
Soluzione
In primo luogo, si dovrebbe essere chiamata prima che il ciclo dal momento che ha solo bisogno di essere filtrato una volta.
In secondo luogo, le chiavi sono conservati quando si utilizza array_unique()
, quindi PHP sta tentando di collegare attraverso indici non-più-esistenti nel vostro array, e può perdere un po 'alla fine pure perché count($merchant_array)
ora ritorna un valore inferiore. È necessario reimpostare le chiavi prima (utilizzando array_values()
), poi loop.
$merchant_array = array_values(array_unique($merchant_array));
for($i = 0; $i<count($merchant_array); $i++)
{
echo $merchant_array[$i] . '<br />';
}
In alternativa, utilizzare un ciclo foreach per saltare la chiamata array_values()
:
$merchant_array = array_unique($merchant_array);
foreach ($merchant_array as $merchant) {
echo $merchant . '<br />';
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow