PHP比较或搜索两个不同阵列的阵列
问题描述:
我将比较两个阵列。 $db
是第一个数组,$tr
是第二个数组。将$tr
与$db
进行比较。如果的值在$db
。然后$result
包含$tr
值:PHP比较或搜索两个不同阵列的阵列
所述第一阵列是$db
$db = [
['a','d'],
['a','e','f'],
['g'],
['b','e','d'],
['a','d','c','e'],
['d','g'],
['c','a','h','e','f','h'],
['g','e','h'],
['d','f','b','h','g']
];
的第二阵列是$tr
$tr = [
['a','b'],
['a','c'], //in
['a','d'], //in
['b','c'],
['b','d'], //in
['c','d'],
];
如果$db
和$tr
比它产生
将有结果$result
这样的:
$result = [
['a','c'],
['a','d'],
['b','d']
];
答
圣诞快乐!
我不认为PHP有一个标准的功能来解决这个问题(虽然我可能错过了你)。有大量的数组函数,但其中大多数不适用于嵌套数组,或者只执行特定任务。
但是,自己编写一个函数通常很容易,如果可以的话,利用内置函数。
下面的函数迭代$ tr中的每个项目。对于每个项目,它迭代$ dm的项目。然后它使用array_diff
获取dm项目中缺失的项目列表。如果该列表为空,则表示来自第一个数组的所有项都包含在第二个数组中,并且第一个数组应该在结果中。
我注意到这个函数在结果中也返回['c', 'd']
,因为c
和d
都包含在$dm
的一个数组中。所以也许你错过了那个,或者我没有正确理解规格。无论如何,这应该让你开始至少:
<?php
$db = [
['a','d'],
['a','e','f'],
['g'],
['b','e','d'],
['a','d','c','e'],
['d','g'],
['c','a','h','e','f','h'],
['g','e','h'],
['d','f','b','h','g']
];
$tr = [
['a','b'],
['a','c'], //in
['a','d'], //in
['b','c'],
['b','d'], //in
['c','d'],
];
function nested_array_intersect($source, $comparewith) {
$result = array();
foreach ($source as $sItem) {
foreach ($comparewith as $cwItem) {
$missingItems = array_diff($sItem, $cwItem);
if (count($missingItems) === 0) {
$result[] = $sItem;
break;
}
}
}
return $result;
}
$result = nested_array_intersect($tr, $db);
print_r($result);
+0
圣诞快乐。谢谢 –
答
function compare($db, $tr)
{
$result = [];
foreach ($db as $val) {
$dbformat[] = implode("", $val);
}
foreach ($tr as $val) {
$pattern = "";
foreach($val as $one) {
$pattern .= $one.".*?";
}
foreach ($dbformat as $value) {
$countMatch = preg_match("/".$pattern."/", $value);
if($countMatch) {
$result[] = $val;
break;
}
}
}
return $result;
}
什么是你的“包含”的定义?我有一段我愿意发布的代码,但是它还会在结果中添加'['c','d']',因为'c'和'd'包含在'['a'中, 'd','c','e']'。是对的吗? – GolezTrol
例如:['a','b']在['a','d','b']中,则将['a','b']插入变量$ result –