[英]How to do an intersection of arrays of arrays
我试图在php中做一个函数,试图使数组的交集。 我发现array_intersect($resultx,$resulty);
但它仅适用于具有一个值的表。 就我而言,我有这样的数组数组。
Array
(
[0] => Array
(
[name] => Chris
[id] => 1033
)
[1] => Array
(
[name] => Vins
[id] => 1034
)
[2] => Array
(
[name] => Steve
[id] => 1035
)
[3] => Array
(
[name] => Henry
[id] => 1036
)
[4] => Array
(
[name] => Jack
[id] => 1037
)
[5] => Array
(
[name] => Paul
[id] => 1038
)
)
为了恢复我的问题,我正在尝试使很多表相交,就像我提到的那样。 所以任何想法
示例tab1 [[1,2,3],[2,3,1]] tab2 [[1,2,3],[5,7,7]结果将是tab3 [[1,2,3]]对你来说清楚吗?
谢谢
@KANDROID操作系统,请检查以下示例以了解数组的交集。
假设您有两个如下所示的数组:
$arr1 = array(
array('name' => 'Chris','id' => '1111'),
array('name' => 'Vins','id' => '1112'),
array('name' => 'Steve','id' => '1113'),
);
$arr2 = array(
array('name' => 'Chris','id' => '1111'),
array('name' => 'dddd','id' => '2222'),
);
您可以使用array_uintersect()来使用自定义比较功能,如下所示:
$intersect = array_uintersect($arr1, $arr2, 'comparevalue');
print_r($intersect);
function comparevalue($val1, $val2)
{
return strcmp($val1['id'], $val2['id']);
}
因此,上述结果如下:
Array
(
[0] => Array
(
[name] => Chris
[id] => 1111
)
)
您可以像这样递归地执行此操作:
$arr1 = array(
array('name' => 'Chris', 'id' => '1033'),
array('name' => 'Vins', 'id' => '1034'),
array('name' => 'Steve', 'id' => '1035'),
array('name' => 'Henry', 'id' => '1036'),
array('name' => 'Jack', 'id' => '1037'),
);
$find = array( // Array for ANY search criteria,
array(1033), // name, id, etc.
array('Vins') // (Each element needs to be an array)
);
$match = array(); // Define array for results
for($i=0; $i < count($arr1); $i++){ // For every "name/id combo",
for($j = 0; $j < count($find); $j++){ // go through every search criteria
$thisMatch = array_intersect( $arr1[$i], $find[$j]); // and check for a match
if ($thisMatch){ // If a match was found,
$match[] = $arr1[$i]; // add it to the results array
}
}
}
var_dump($match);
这将导致:
Array
[0] =>
Array (
'name' => string 'Chris'
'id' => string '1033'
)
[1] =>
Array (
'name' => string 'Vins' (length=4)
'id' => string '1034' (length=4)
)
但是,您必须小心,在使用回调的示例中,尝试对“名称”和“ id”值使用相交将不会像您期望的那样返回成对的值。 它只需要找到一个值,因此,如果您尝试搜索与另一个“ id”相对应的“名称”,即使该“组合”不存在,您也将获得两项。 即使您像这样在搜索中使用键,它也会做同样的事情:
$find = array(
array('id' => 1033),
array('name' => 'Vins')
);
我只是注意到了这个问题,所以我想提出来。 根据您要执行的操作,无论如何,您都可能需要某种递归方面,如我所展示的。
希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.