Eğer bir dizinin bir satır dosyanızın her çizgi var gibi, array_filter
function might interest you (quoting):
array array_filter ( array $input [, callback $callback ] )
Iterates over each value in the input
array passing them to the callback
function.
If the callback
function returns true, the current
value from input is returned into the
result array. Array keys are
preserved.
Ve bir dize başka bir yer olup olmadığını belirlemek için strpos
or stripos
a> kullanabilirsiniz.
For instance, let's suppose we have this array :
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
Biz, "glop
" içeren satırları süzmek verecek bir geri çağırma işlevi tanımlayabilirsiniz:
function keep_no_glop($line) {
if (strpos($line, 'glop') !== false) {
return false;
}
return true;
}
Ve ile bu işlevi kullanın array_filter
:
$arr_filtered = array_filter($arr, 'keep_no_glop');
var_dump($arr_filtered);
Ve biz çıktı bu tür almak istiyorum:
array
0 => string 'this is a test' (length=14)
2 => string 'i like php' (length=10)
Yani biz "BADWORD" "glop" içeren tüm satırları kaldırdık.
Of course, now that you have the basic idea, nothing prevents you from using a more complex callback function ;-)
Edit after comments : burada çalışmak gerekir kod tam bir bölümü:
Her şeyden önce, hatları listenizi var:
$arr = array(
'this is a test',
'glop test',
'i like php',
'a badword, glop is',
);
Then, you load the list of bad words from a file :
And you trim each line, and remove empty lines, to make sure you only end up with "words" in the $bad_words
array, and not blank stuff that would cause troubles.
$bad_words = array_filter(array_map('trim', file('your_file_with_bad_words.txt')));
var_dump($bad_words);
$bad_words
dizisi benim test dosyası içerir:
array
0 => string 'glop' (length=4)
1 => string 'test' (length=4)
Then, the callback function, that loops over that array of bad words :
Note : using a global variable is not that nice :-( But the callback function called by array_filter
doesn't get any other parameter, and I didn't want to load the file each time the callback function is called.
function keep_no_glop($line) {
global $bad_words;
foreach ($bad_words as $bad_word) {
if (strpos($line, $bad_word) !== false) {
return false;
}
}
return true;
}
Ve, daha önce olduğu gibi, sen array_filter
satırları filtrelemek için kullanabilirsiniz:
$arr_filtered = array_filter($arr, 'keep_no_glop');
var_dump($arr_filtered);
Hangi, bu kez, size verir:
array
2 => string 'i like php' (length=10)
Umarım bu yardımcı olur.