Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组差和元素部分相等_Php_Arrays - Fatal编程技术网

Php 数组差和元素部分相等

Php 数组差和元素部分相等,php,arrays,Php,Arrays,我想比较两个数组,不包括部分相等的元素 我取得了以下成果: 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 尝试: 您可以使用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

我想比较两个数组,不包括部分相等的元素

我取得了以下成果:

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
尝试:
您可以使用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);

您忘记了密码。还有,这个问题真的不清楚。谢谢。代码有问题。为了得到一个建议,我简化了代码。我找不到一个好的解决办法。我已经尝试了array_diff、preg_match和其他一些方法,但找不到正确的指令。您的array diff必须对齐吗?作为
$aa[0]
对抗
$bb[0]
等等?或者您想对照所有
$bb
元素检查
$aa
中的每个索引?您需要澄清为什么3 4 5 9 10和15不是正确解决方案的一部分注意OP不希望
3 4 5
作为它们的一部分(
1 2
)在
$bb
@dWinder中没有意义。OP需要澄清这些问题。这个例子不适用于我的目的。我的目标是比较数组$aa中的每个元素,如果部分相等,则排除它。e、 g$bb中的“12”不包括“123445”等。考虑到我的例子,我将得到以下结果“2122232425”。数组$aa的所有其他元素都应该被排除。因此,如果$bb的一个子项与$aa中的一个子项匹配,那么$aa中的所有子项都将被丢弃?很抱歉我的回复太晚。我做了一些测试。上述解决方案在理论上可行。事实上,我的目标是不同的。如果$bb的一个子项匹配,则丢弃$aa中的一个子项是不够的。我会将$aa中数组的每个元素与$bb的两个、三个或四个数字(而不仅仅是一个)进行比较,如果部分马赫数与$bb相同,则丢弃一个子项。也许我可以使用数组_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);