我一直在尝试比较多维数组中内部数组的值,并将这些常用值提取到另一个数组中。
我已经尝试使用array_intersect
和foreach
循环,但这并没有给我结果,这里内部数组的数量是动态的,并且是从不同的函数生成的。有没有人在比较多维数组的数组元素之前尝试过?
我的数组:
$days_filter = array(
[0] => array(
'00:00',
'01:30',
'02:30',
),
[1] => array(
'00:00',
'01:30',
'03:30',
),
[2] => array(
'00:30',
'01:30',
'02:30',
),
[3] => array(
'00:30',
'01:30',
'04:30',
),
);
$res_arr = $days_filter[0];
foreach ($days_filter as $filter) {
$res_arr = array_intersect($res_arr, $filter);
}
预期的输出数组:
$res_arr = array(
[0]=>'01:30'
)
因为01:30
是所有内部数组的公共元素。
答案 0 :(得分:3)
如果您使用的是PHP 5.6+:
$res_arr = array_intersect(...$days_filter);
否则:
$res_arr = call_user_func_array('array_intersect', $days_filter);
你完成了:)
答案 1 :(得分:2)
您可以使用此代码:
<?php
$days_filter = array(
0 => array(
'00:00',
'01:30',
'02:30',
),
1 => array(
'00:00',
'01:30',
'03:30',
),
2 => array(
'00:30',
'01:30',
'02:30',
),
3 => array(
'00:30',
'01:30',
'04:30',
),
);
$result = array();
for($j = 0; $j < count($days_filter[0]); $j++)
{
$tempArray = array();
for($i = 0; $i < count($days_filter); $i++)
$tempArray[] = $days_filter[$i][$j];
if(count(array_unique($tempArray)) == 1)
$result[] = $tempArray[0];
}
print_r($result);
工作演示:CLICK!!!
它与PHP版本无关,因此您无需考虑PHP5版本此脚本的工作原理。
答案 2 :(得分:0)
尝试来自source
的此类来源<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
$result=array_intersect($a1,$a2);
print_r($result);
?>
答案 3 :(得分:0)
array_intersect()
适合您......
$days_filter = array(
0 => array(
'00:00',
'01:30',
'02:30',
),
1 => array(
'00:00',
'01:30',
'03:30',
),
2 => array(
'00:30',
'01:30',
'02:30',
),
3 => array(
'00:30',
'01:30',
'04:30',
),
);
$first = $days_filter[0];
for($i=1; $i<count($days_filter); $i++)
{
$result = array_intersect($first, $days_filter[$i]);
$first = $result;
}
print_r($result);
这会给你:
Array
(
[1] => 01:30
)