J'utilise la boucle suivante pour ajouter des éléments à un tableau de la liste appelé $ liste. Je voudrais savoir s'il est possible de ne pas ajouter $ value au tableau $ liste si la valeur est déjà dans le tableau? J'espère que je suis clair. Merci d'avance.
$liste = array();
foreach($something as $value){
array_Push($liste, $value);
}
Vous vérifiez si c'est là, en utilisant in_array
, avant d'appuyer.
foreach($something as $value){
if(!in_array($value, $liste, true)){
array_Push($liste, $value);
}
}
Le ,true
permet la "vérification stricte". Ceci compare les éléments en utilisant ===
au lieu de ==
.
Deux options vraiment.
Option 1: Vérifiez chaque élément et n'appuyez pas sur l'élément. Fondamentalement, ce que vous demandez:
foreach($something as $value) {
if( !in_array($value,$liste)) array_Push($liste,$value);
}
Option 2: Ajoutez-les quand même et supprimez les doublons après:
foreach($something as $value) {
array_Push($liste,$value);
}
$liste = array_unique($liste);
Cependant, il se peut que vous recherchiez simplement $liste = array_unique($something);
.
Comme cette question utilise au départ pas le code de bonne pratique, je trouve toutes les réponses trop compliquées.
Code de résolution en question:
Fondamentalement, ce que l’on essaie de faire dans la question elle-même consiste à filtrer les répétitions. Meilleure approche:
$liste = array_unique($something);
Si vous ajoutez des éléments à un tableau qui n'est pas vide:
$liste = array_unique(array_merge($liste, $something));
Si vous utilisez array_Push ():
Sauf si vous utilisez réellement la valeur de retour de array Push, vous devriez vraiment utiliser:
$liste[] = $value;
pour une syntaxe plus courte et une augmentation mineure des performances
peut-être voudrez-vous plutôt l’utiliser comme un tableau associatif. c'est implémenté comme (quelque chose comme) une table de hachage , donc vous obtenez __ un temps d'insertion constant au lieu de linéaire.
function find_uniq( $something ) {
foreach($something as $value){
$liste[$value]++;
}
return array_keys( $liste );
}
Vous pouvez simplement vérifier cette condition avant d'appeler array_Push()
. Utilisez array_search()
et utilisez une comparaison solide avec false
pour voir si la valeur est présente:
foreach( $something as $value ){
if( array_search( $value, $liste, true ) === false ){
array_Push( $liste, $value );
}
}
(Au fait: ajoutez ,true
à array_search
pour utiliser le "contrôle strict". Ceci utilisera ===
pour les comparaisons au lieu de ==
)
Économisez de la logique et améliorez votre vitesse en la maintenant sans logique. Continuez simplement à écraser.
$list = array();
foreach ($something as $value) {
if (!is_object($value) && !is_array($value)) {
$list[$value] = $value
}
}
$list = array_values($list);
La bonne réponse est beaucoup plus simple. Appuyez sur tout, mais utilisez ensuite la fonction array_unique()
:
array_Push($array, $new_member);
$array = array_unique($array);
Les bonnes réponses sont déjà présentes ci-dessus, mais si vous avez plusieurs array_Push () dans tout votre code, il serait difficile d’écrire à chaque fois si (in_array ()).
Voici une solution qui raccourcira votre code pour ce cas: Utilisez une fonction distincte.
function arr_inserter($arr,$add){ //to prevent duplicate when inserting
if(!in_array($add,$arr))
array_Push($arr,$add);
return $arr;
}
Ensuite, dans tous vos besoins array_Push (), vous pouvez appeler cette fonction ci-dessus, comme ceci:
$liste = array();
foreach($something as $value){
$liste = arr_inserter($liste, $value);
}
Si $ value est déjà présent, $ liste reste inchangé.
Si $ value n'est pas encore présente, elle est ajoutée à $ liste.
J'espère que cela pourra aider.