Pourquoi ne pas ce travail array_unique comme prévu?
-
27-09-2019 - |
Question
Quelqu'un peut-il me dire pourquoi cela ne fonctionne pas comme prévu?
<?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 />';
}
?>
Les résultats que je reçois est:
Woolovers
Roxio
BandQ
Big Bathroom Shop
Robert Dyas
Je ne veux que les doublons disparu: |
La solution
Tout d'abord, vous devriez l'appeler avant que la boucle car il ne doit filtrer qu'une seule fois.
En second lieu, les clés sont préservées lorsque vous utilisez array_unique()
, si PHP tente de boucle à travers des indices qui ne sont plus existants dans votre tableau, et peut manquer un peu à la fin et parce count($merchant_array)
retourne maintenant une valeur plus petite. Vous devez réinitialiser les clés premier (à l'aide array_values()
), puis en boucle.
$merchant_array = array_values(array_unique($merchant_array));
for($i = 0; $i<count($merchant_array); $i++)
{
echo $merchant_array[$i] . '<br />';
}
Vous pouvez également utiliser une boucle foreach pour ignorer l'appel array_values()
:
$merchant_array = array_unique($merchant_array);
foreach ($merchant_array as $merchant) {
echo $merchant . '<br />';
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow