Je veux retourner une array qui ne contient pas de liste de caractères.
Code ci-dessous fonctionne bien pour un mot-clé ( 'BC' code>). P>
$array = array("abc", "def", "ghi");
$excludeKeyword_arr = ("ab", "de");
foreach($excludeKeyword_arr as $exclude){
$filterArray = array_filter($array, function ($var) {return(strpos($var, $exclude) === false);});
}
print_r($filterArray);
4 Réponses :
Il y a 2 problèmes avec le code. Le premier est que la portée de Le deuxième problème est que vous filtrez toujours le tableau d'origine ( quels résultats dans p> $ exclude code> ne permet pas la fermeture d'y accéder, simplement résolue en le transmettant avec
Utiliser code>.
$ TRAY CODE>) et que l'effet accumulatif n'est donc pas atteint. Alors ici, je copie ici la matrice et continue à filtrer la copie (
filterarray = array_filter ($ filterarray, fonction code>) ... p>
Vous pouvez utiliser preg_grep qui fera le contraire et correspondra à ceux qui ont BC code> ou
de code> puis array_diff.
$array = array("abc", "def", "ghi");
$excludeKeyword_arr = array("bc", "de");
$exclude_values = preg_grep("/". implode("|", $excludeKeyword_arr) . "/", $array);
$filterArray = array_diff($array, $values_with_bc);
print_r($filterArray); // [ 2 => "ghi"]
Vous devez modifier $ valkals_with_bc code>, mettez également à jour les ceux qui ont BC B> ou DeLue i>
Pour de meilleures performances, utilisez un Si le La sous-chaîne se trouve n'importe où dans la chaîne de foin, retirez-la de la matrice de foints à l'aide de code: ( sortie: p> un mot de prudence: Si vous divertissez la notion d'un foreach () code> boucle avec un
Pause conditionnelle code> - De cette façon, PHP n'a pas besoin de réaliser des itérations inutiles.
nonset () code>. p>
PREG _ CODE> appelez à la Brevity's Sake's Sake, à comprendre que pour la fiabilité / la stabilité, vous devez appliquer
Preg_Quote () code> à chaque valeur du tableau des aiguilles si Il y a une chance de personnages avec une signification spéciale pour le moteur de regex. p> p>
Je ferais la même chose que @andreas, mais réindexing à la fin.
$array = ["ab", "def", "ghi"]; $excludeKeywords = ["ab", "de"]; $pattern = implode("|", $excludeKeywords); $result = preg_grep("/$pattern/i", $array); // Positive (Reindex) print_r(array_values($result)); // Negative (Reindex) $result = array_diff($array, $result); print_r(array_values($result));
Stackoverflow.com/Questtions/10589921/...