medida que tiene cada línea de su archivo en una fila de una matriz, la función array_filter
vez te interesa (citando):
array array_filter (array $input [, callback $callback ])
Repite cada valor de la entrada array pasándolos a la función de devolución de llamada .
Si la función de devolución de llamada devuelve verdadero, el valor actual de la entrada se devuelve a la matriz de resultados . Las teclas del array son preservadas.
Y puede utilizar strpos
o stripos
para determinar si una cadena está contenida en otra.
Por ejemplo, supongamos que tenemos esta matriz:
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
podríamos definir una función de devolución de llamada que filtrar las líneas que contienen "glop
":
function keep_no_glop($line) {
if (strpos($line, 'glop') !== false) {
return false;
}
return true;
}
Y el uso de esa función con array_filter
:
$arr_filtered = array_filter($arr, 'keep_no_glop');
var_dump($arr_filtered);
Y que tendríamos este tipo de salida:
array
0 => string 'this is a test' (length=14)
2 => string 'i like php' (length=10)
es decir, hemos eliminado todas las líneas que contienen el "bad words" "pastoso".
Por supuesto, ahora que tiene la idea básica, nada impide que utilice una llamada de retorno más complejo ;-)
Edición después de comentarios: aquí está una porción de código que completa debería funcionar:
En primer lugar, usted tiene su lista de líneas:
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
Luego, carga la lista de palabras incorrectas de un archivo:
Y recorta cada línea, y elimina las líneas vacías, para asegurarse de que solo termina con "palabras" en la matriz $bad_words
, y no cosas en blanco que causarían nubes.
$bad_words = array_filter(array_map('trim', file('your_file_with_bad_words.txt')));
var_dump($bad_words);
La matriz $bad_words
contiene, de mi archivo de prueba:
array
0 => string 'glop' (length=4)
1 => string 'test' (length=4)
A continuación, la función de devolución de llamada, que se repite sobre esa matriz de malas palabras:
Nota: el uso de una variable global no es que nice :-(Pero la función de devolución de llamada llamada por array_filter
no obtiene ningún otro parámetro, y no quería cargar el archivo cada vez que se llama a la función de devolución de llamada.
function keep_no_glop($line) {
global $bad_words;
foreach ($bad_words as $bad_word) {
if (strpos($line, $bad_word) !== false) {
return false;
}
}
return true;
}
Y, como antes, se puede utilizar para filtrar los array_filter
líneas:
$arr_filtered = array_filter($arr, 'keep_no_glop');
var_dump($arr_filtered);
Lo que, esta vez, le da:
array
2 => string 'i like php' (length=10)
Espero que esto ayude.
muchas gracias por explicar todo – Jimmy
De nada :-) Diviértete! –
solo dime qué hacer si quiero agregar una lista de palabras, por ejemplo, si puedo escribir otra lista de palabras, una palabra por línea, entonces? y si quiero agregar más palabras con glop – Jimmy