我正在尝试在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]你很清楚吗?
由于
答案 0 :(得分:1)
@KANDROID OS,请查看下面的数组交叉示例。
假设您有两个如下所示的数组:
$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
)
)
答案 1 :(得分:0)
你可以递归地这样做:
$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)
)
你必须要小心,使用回调的例子,尝试使用相交的名称&#39;和&#39; id&#39;值不会像您期望的那样返回配对值。它只需要查找其中一个值,因此如果您尝试搜索名称&#39;对应于不同的ID,您将获得两个项目,即使该组合&#34;组合&#34;不存在。即使您在搜索中使用这样的键,它也会做同样的事情:
$find = array(
array('id' => 1033),
array('name' => 'Vins')
);
我刚刚注意到这个问题所以我认为我会把它提起来。根据您尝试做的事情,您可能需要某种递归方面,就像我所展示的那样。
希望这会有所帮助:)