Comme vous l'avez chaque ligne de votre fichier dans une rangée d'un tableau, la fonction array_filter
pourrait vous intéresser (citant):
array array_filter (array $input [, callback $callback ])
Répète chaque valeur dans l'entrée les transmettre à la fonction de rappel .
Si la fonction de rappel renvoie la valeur true, la valeur actuelle de l'entrée est renvoyée dans le tableau de résultats . Les clés de tableau sont conservées.
Et vous pouvez utiliser strpos
ou stripos
pour déterminer si une chaîne est contenue dans un autre.
Par exemple, supposons que nous avons ce tableau:
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
On pourrait définir une fonction de rappel qui filtrer les lignes contenant « glop
»:
function keep_no_glop($line) {
if (strpos($line, 'glop') !== false) {
return false;
}
return true;
}
Et utiliser cette fonction avec:
Et nous obtiendrions ce genre de sortie:
array
0 => string 'this is a test' (length=14)
2 => string 'i like php' (length=10)
dire que nous avons supprimé toutes les lignes contenant le « BADWORD » « glop ».
Bien sûr, maintenant que vous avez l'idée de base, rien ne vous empêche d'utiliser une fonction plus de rappel complexe ;-)
Modifier après les commentaires: est ici une partie pleine de code devrait fonctionner:
tout d'abord, vous avez votre liste de lignes:
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
Ensuite, vous chargez la liste des mots incorrects à partir d'un fichier:
Et vous rognez chaque ligne et supprimez les lignes vides, pour vous assurer que vous ne finissez avec des "mots" dans le tableau $bad_words
, et pas des choses vides qui causeraient troubles.
$bad_words = array_filter(array_map('trim', file('your_file_with_bad_words.txt')));
var_dump($bad_words);
Le tableau $bad_words
contient, de mon fichier de test:
array
0 => string 'glop' (length=4)
1 => string 'test' (length=4)
Ensuite, la fonction de rappel, qui passe en boucle sur ce tableau de mauvais mots:
Note: en utilisant une variable globale est pas belle :-(Mais la fonction de rappel appelée par array_filter
ne soit pas tout autre paramètre, et je ne voulais pas charger le fichier à chaque fois que la fonction de rappel est appelée.
function keep_no_glop($line) {
global $bad_words;
foreach ($bad_words as $bad_word) {
if (strpos($line, $bad_word) !== false) {
return false;
}
}
return true;
}
Et, comme avant, vous pouvez utiliser array_filter
pour filtrer les lignes:
$arr_filtered = array_filter($arr, 'keep_no_glop');
var_dump($arr_filtered);
qui, cette fois, vous donne:
array
2 => string 'i like php' (length=10)
Hope this helps.
merci beaucoup pour expliquer l'ensemble – Jimmy
Vous êtes les bienvenus :-) Amusez-vous! –
Dites-moi simplement wat à faire si je veux ajouter une liste de mots, comme si je peux écrire une autre liste de mots, un mot par ligne alors? et si je veux ajouter plus de mots avec glop – Jimmy