如何在两个不同的数组中生成具有匹配值的键数组

时间:2015-08-04 10:04:38

标签: php

匹配两个数组值并生成值相同的键数组 我设法解决这个问题,如下所述,但两个数组都可能包含大量记录, 那么有谁能建议更优化的解决方案? 结果应与现在相同

$arr1 = array(
    105 => '101,Utility,\N',
    102 => '101,Utility,\N',
    103 => '105,Parker,Peter',
    104 => 'Rahul Ippar'
);

$arr2 = array(
    108 => '101,Utility1,Floor',
    120 => '101,Utility2,\N',
    130 => '105,Parker,Peter',
    140 => 'Rahul Ippar'
);

$arr3 = array_intersect( $arr2, $arr1 );
$arr4 = array_flip( $arr1 );

foreach( $arr3 as $k => $v ) {
    $arr3[$k] = $arr4[$v];
}

print_r($arr3);

结果应与以下相同

Array
(
    [130] => 103
    [140] => 104
)

1 个答案:

答案 0 :(得分:1)

另一种选择是:

$result = array_combine(
    array_keys(array_intersect( $arr2, $arr1 )),
    array_keys(array_intersect( $arr1, $arr2 ))
);

Demo

它是否更快或更高效,我不知道,尽管它应该是因为它使用较少的数据副本(因此内存使用量较少),并且循环次数较少;但这是您需要用大量数据进行测试的东西