我想比较两个数组,不包括部分相等的元素。
我达到了以下结果:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
21 22 23 24 25
所需的结果是:
21 22 23 24 25
$aa = array("1 2 3 4 5", "6 7 8 9 10", "11 12 13 14 15", "16 17 18 19 20", "21 22 23 24 25");
$bb = array("1 2", "6 7 8", "11 12 13 14", "16 17 18 19 20");
$final = array_diff($aa, $bb);
print_r($final)
答案 0 :(得分:1)
您可以使用preg_grep以便不必对数据进行任何操作。
这将使正则表达式查看匹配的内容,然后您只需使用array_diff。
$aa = array("1 2 3 4 5", "6 7 8 9 10", "11 12 13 14 15", "16 17 18 19 20", "21 22 23 24 25");
$bb = array("1 2", "6 7 8", "11 12 13 14", "16 17 18 19 20");
$exclude = [];
foreach($bb as $b){
$exclude = array_merge($exclude, preg_grep("/^". preg_quote($b) . "/", $aa));
}
$final = array_diff($aa, $exclude);
print_r($final);
答案 1 :(得分:1)
首先使用array-map将字符串分解为数组:(不要忘记对$bb
做同样的操作)
$aa = array_map(function ($e) {return explode(" ", $e);}, $aa);
然后使用array-merge合并所有$bb
元素,因为其中甚至有一个从A取消了数组:
$exlude = array_merge(...$bb);
然后使用array-intersect检查交集以查看结果数组是否包含排除元素之一:
foreach($aa as $e) {
if (!array_intersect($e, $exlude)) $filterd[] = $e;
}
完整示例可见HERE