php - 比较和提取常见的数组元素

时间:2016-05-20 11:30:02

标签: php arrays multidimensional-array

我一直在尝试比较多维数组中内部数组的值,并将这些常用值提取到另一个数组中。 我已经尝试使用array_intersectforeach循环,但这并没有给我结果,这里内部数组的数量是动态的,并且是从不同的函数生成的。有没有人在比较多维数组的数组元素之前尝试过?

我的数组:

    $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是所有内部数组的公共元素。

4 个答案:

答案 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
)