我有两个数组,它们看起来都像这样:
Array
(
[0] => Array
(
[name] => STRING
[value] => STRING
)
[1] => Array
(
[name] => STRING
[value] => STRING
)
[2] => Array
(
[name] => STRING
[value] => STRING
)
)
我希望能够通过比较两个主阵列中的子阵列的ID来复制array_intersect。到目前为止,我的尝试还没有成功。:(
发布于 2011-04-14 01:59:17
使用array_uintersect()
使用自定义比较函数,如下所示:
$arr1 = array(
array('name' => 'asdfjkl;', 'value' => 'foo'),
array('name' => 'qwerty', 'value' => 'bar'),
array('name' => 'uiop', 'value' => 'baz'),
);
$arr2 = array(
array('name' => 'zxcv', 'value' => 'stuff'),
array('name' => 'asdfjkl;', 'value' => 'foo'),
array('name' => '12345', 'value' => 'junk'),
array('name' => 'uiop', 'value' => 'baz'),
);
$intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
print_r($intersect);
function compareDeepValue($val1, $val2)
{
return strcmp($val1['value'], $val2['value']);
}
这会产生,正如你所希望的:
Array
(
[0] => Array
(
[name] => asdfjkl;
[value] => foo
)
[2] => Array
(
[name] => uiop
[value] => baz
)
)
发布于 2015-12-21 21:50:09
function compareDeepValue($val1, $val2)
{
return strcmp($val1['value'], $val2['value']);
}
请确保val1数组中存在val2密钥,因为该函数是先对数组进行排序。非常奇怪。
发布于 2019-05-08 14:21:48
您可以使用嵌入式函数与array_uintersect的php函数。例如:
$intersectNames = array_uintersect($arr1, $arr2, function ($val1, $val2){
return strcmp($val1['name'], $val2['name']);
});
$intersectValues = array_uintersect($arr1, $arr2, function ($val1, $val2){
return strcmp($val1['value'], $val2['value']);
});
print_r('namesIntersected' => $intersectNames, 'valuesIntersected' => $intersectValues)
https://stackoverflow.com/questions/5653241
复制相似问题