[英]PHP How to get the intersection of two or more arrays
我正在尝试使用这种结构来获取两个或多个数组的交集:
第一个数组:
array(
[0] => array(
['room_id'] => 21
['room_name'] => 'GB 101'
['capacity'] => 40
)
[1] => array(
['room_id'] => 22
['room_name'] => 'H 114'
['capacity'] => 20
)
[2] => array(
['room_id'] => 23
['room_name'] => 'GB 203'
['capacity'] => 20
)
[3] => array(
['room_id'] => 25
['room_name'] => 'H 100'
['capacity'] => 30
)
[4] => array(
['room_id'] => 26
['room_name'] => 'GB 206'
['capacity'] => 40
)
)
第二个数组:
array(
[0] => array(
['room_id'] => 21
['room_name'] => 'GB 101'
['capacity'] => 40
)
[1] => array(
['room_id'] => 23
['room_name'] => 'GB 203'
['capacity'] => 20
)
[2] => array(
['room_id'] => 26
['room_name'] => 'GB 206'
['capacity'] => 40
)
)
结果数组:
array(
[0] => array(
['room_id'] => 21
['room_name'] => 'GB 101'
['capacity'] => 40
)
[1] => array(
['room_id'] => 23
['room_name'] => 'GB 203'
['capacity'] => 20
)
[2] => array(
['room_id'] => 26
['room_name'] => 'GB 206'
['capacity'] => 40
)
)
我尝试使用array_intersect_assoc使用以下代码获取交点:
$result = call_user_func_array('array_intersect_assoc', $arrays);
它可以解决问题,但是会给出以下警告,请按照此处进行操作 :
遇到PHP错误
严重程度:注意
消息:数组到字符串的转换
我正在制作一个基于Ajax的系统,因此错误将其弄乱了。 有什么办法可以得到数组的交集吗?
尝试序列化它们:
$result = array_map('unserialize',
array_intersect(
array_map('serialize', $first), array_map('serialize', $second)));
使用array_uintersect()
可以使用自定义比较功能,例如,按room_id
进行比较。
<?php
$array1 = array(
"0" => array(
"room_id" => 21,
"room_name" => 'GB 101',
"capacity" => 40
),
"1" => array(
"room_id" => 22,
"room_name" => 'H 114',
"capacity" => 20
),
"2" => array(
"room_id" => 23,
"room_name" => 'GB 203',
"capacity" => 20
),
"3" => array(
"room_id" => 25,
"room_name" => 'H 100',
"capacity" => 30
),
"4" => array(
"room_id" => 26,
"room_name" => 'GB 206',
"capacity" => 40
)
);
$array2 = array(
"0" => array(
"room_id" => 21,
"room_name" => 'GB 101',
"capacity" => 40
),
"1" => array(
"room_id" => 23,
"room_name" => 'GB 203',
"capacity" => 20
),
"2" => array(
"room_id" => 26,
"room_name" => 'GB 206',
"capacity" => 40
)
);
$intersect = array_uintersect($array1, $array2, 'compareDeepValue');
function compareDeepValue($val1, $val2)
{
return strcmp($val1['room_id'], $val2['room_id']);
}
echo "<pre>";
print_r($intersect);
?>
输出:
Array
(
[0] => Array
(
[room_id] => 21
[room_name] => GB 101
[capacity] => 40
)
[1] => Array
(
[room_id] => 23
[room_name] => GB 203
[capacity] => 20
)
[2] => Array
(
[room_id] => 26
[room_name] => GB 206
[capacity] => 40
)
)
要比较两个多维数组,一个简单的解决方案是
$new_array = array();
foreach($array1 as $sub_array1)
{
foreach($array2 as $sub_array2)
{
if($sub_array1 === $sub_array2)
{
$new_array[] = $sub_array2;
}
}
}
print_r($new_array);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.