0
votes

Plusieurs array_filter et Stros

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 :


1
votes

Il y a 2 problèmes avec le code. Le premier est que la portée de $ exclude ne permet pas la fermeture d'y accéder, simplement résolue en le transmettant avec Utiliser .

Le deuxième problème est que vous filtrez toujours le tableau d'origine ( $ TRAY ) 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 ) ... xxx

quels résultats dans xxx


0 commentaires

1
votes

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"]


1 commentaires

Vous devez modifier $ valkals_with_bc , mettez également à jour les ceux qui ont BC ou DeLue



0
votes

Pour de meilleures performances, utilisez un foreach () boucle avec un Pause conditionnelle - De cette façon, PHP n'a pas besoin de réaliser des itérations inutiles.

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 nonset () .

code: ( démo ) xxx

sortie: xxx

un mot de prudence: Si vous divertissez la notion d'un PREG _ appelez à la Brevity's Sake's Sake, à comprendre que pour la fiabilité / la stabilité, vous devez appliquer Preg_Quote () à chaque valeur du tableau des aiguilles si Il y a une chance de personnages avec une signification spéciale pour le moteur de regex.


0 commentaires

0
votes

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));


0 commentaires