使用公共密钥值进行两个数组的交集以进行比较

时间:2014-10-07 11:23:10

标签: php arrays

我想执行两个具有不同结构的数组的交集,但两个数组都有一个共同的键(fid)。我希望在与第一个数组交叉后有一个新的(已过滤的第二个)数组。下面是我的代码和两个数组:

第一个数组:

 Array
    (
        [0] => Array
            (
                [fid] => 1
            )

        [1] => Array
            (
                [fid] => 3
            )  
    ) 

第二阵列:

Array
(
    [0] => Array
        (
            [fid] => 9
            [functionality] => testing
            [funcat_id] => 1
            [name] => functionality
        )

    [1] => Array
        (
            [fid] => 1
            [functionality] => add functionality
            [funcat_id] => 1
            [name] => functionality
        )

    [2] => Array
        (
            [fid] => 2
            [functionality] => view functionality category
            [funcat_id] => 1
            [name] => functionality
        )

    [3] => Array
        (
            [fid] => 3
            [functionality] => view functionality
            [funcat_id] => 1
            [name] => functionality
        )

    [4] => Array
        (
            [fid] => 4
            [functionality] => edit functionality
            [funcat_id] => 1
            [name] => functionality
        )
)

我想要这个输出:

Array
(
    [0] => Array
        (
            [fid] => 1
            [functionality] => add functionality
            [funcat_id] => 1
            [name] => functionality
        )

    [1] => Array
        (
            [fid] => 3
            [functionality] => view functionality
            [funcat_id] => 1
            [name] => functionality
        )
)

我尝试了这段代码,但我没有得到正确答案:

$result=array_intersect($array1,$array2);
//Or this also
$result=recursive_array_intersect_key($array1,$array2);

请告诉我,如果有人可以这样做吗?

2 个答案:

答案 0 :(得分:2)

我不知道一个函数是否确实存在,但是,你可以改为循环它们:

$result = array();
foreach($array2 as $val2) {
    foreach ($array1 as $val1) {
        if($val2['fid'] == $val1['fid']) {
            $result[] = $val2;
        }
    }
}

echo '<pre>';
print_r($result);

Sample Output

或者,如果您使用的是PHP 5.5或更高版本:

$val1 = array_column($array1, 'fid');
$result = array_filter($array2, function($val2) use($val1) {
    return in_array($val2['fid'], $val1);
});

答案 1 :(得分:1)

foreach($array2 as $val)
{
    $i=0;
    foreach($array1 as $val1)
    {
        if($val['fid']==$val1['fid'])
        {
            $i++;
        }
    }

    if($i!=0)
    {
        $a[]=$val;
    }
}

print_r($a);