我有一个需要过滤的数组。我想用一组列入黑名单的单词进行过滤,以获得一个没有那些被禁止的“单词”的新数组。
[
['occurence' => 17, 'word' => 'sampleword'],
['occurence' => 14, 'word' => 'sampleword1'],
['occurence' => 14, 'word' => 'sampleword2'],
['occurence' => 14, 'word' => 'sampleword3'],
]
我有一个功能很好用,但它只过滤一个“词”。
function words_not_included( $w ) {
$not_included = 'sampleword1';
return $w['word'] != $not_included;
}
然后我申请了
$new_array = array_filter($old_array, "words_not_included");
所以它适用于一个词。
我怎样才能拥有一系列禁止的“单词”,例如:
$forbidden_words = ['sampleword1', 'sampleword3'];
然后用它们过滤并输出一个像这样的新数组:
[
['occurence' => 17, 'word' => 'sampleword'],
['occurence' => 14, 'word' => 'sampleword2'],
]
使用现有代码
in_array
:
function words_not_included( $w ) {
$not_included = array('sampleword1', 'sampleword3');
return !in_array($w['word'], $not_included);
}
如果我没理解错的话,你有 2 个数组,你希望第一个数组不包含第二个数组中的任何单词。
例如,如果您将 ['ball', 'pie', 'cat', 'dog', 'pineapple'] 作为第一个数组,将 ['ball', 'cat'] 作为第二个数组,您需要输出为 ['pie', 'dog', 'pineapple']
in_array() 允许你传入一个数组,这样你就可以将多个值放在一起比较。根据您当前的代码,您可以执行以下操作:
function words_not_included( $allWords, $ignoreWords ) {
return !in_array( $ignoreWords, $allWords);
}
这样试试
function words_not_included($inputArray, $forbiddenWordsArray){
$returnArray = array();
//loop through the input array
for ($i = 0; $i < count($inputArray);$i++){
foreach($inputArray[$i] as $key => $value){
$allowWordsArray = array();
$isAllow = false;
//only the word element
if($key == "word"){
//separate the words that will be allow
if(!in_array($value,$forbiddenWordsArray)){
$isAllow = true;
}
}
if ($isAllow === true){
$returnArray[] = $inputArray[$i];
}
}
}
return $returnArray;
}
$inputArray = array();
$inputArray[] = array("occurence" => 17, "word" => "sampleword");
$inputArray[] = array("occurence" => 17, "word" => "sampleword1");
$forbiddenWords = array("sampleword");
var_dump(words_not_included($inputArray, $forbiddenWords));
将this answer的过滤从交集反转为差异。
代码:(演示)
var_export(
array_udiff(
$array,
$forbidden_words,
fn($a, $b) =>
($a['word'] ?? $a)
<=>
($b['word'] ?? $b)
)
);
因为
$a
和 $b
可能来自任一数组,请尝试访问“word”列中的值。如果没有“word”元素,则变量包含平面数组中的数据,无需指定键即可访问。