PHP数组密钥对值传递的复杂性问题

PHP数组密钥对值传递的复杂性问题,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有两个数组。array1和array2是相同的,只是array2的子阵列没有键“key3”,并且子阵列的顺序不匹配 $array1=array( 0=>array( 'type'=>'1' 'id'=>'1' 'key3'=>'abc' ) 1=>array( 'type'=>'1' 'id'=>'2' 'key3'=>

我有两个数组。array1和array2是相同的,只是array2的子阵列没有键“key3”,并且子阵列的顺序不匹配

$array1=array(
    0=>array(
        'type'=>'1'
        'id'=>'1'
        'key3'=>'abc'
        )
    1=>array(
        'type'=>'1'
        'id'=>'2'
        'key3'=>'def'
        )
    3=>array(
        'type'=>'2'
        'id'=>'1'
        'key3'=>'ghi'
        )
    ...
)
$array2=array(
    0=>array(
        'type'=>'1'
        'id'=>'1'
        )
    1=>array(
        'type'=>'2'
        'id'=>'1'
        )
    ...
)
该任务只需将键3及其值放入array2的相应子数组中

我只能想到几个层次的foreach循环来完成这项任务,这将是非常昂贵的

有什么方法可以使任务更简单、更快

// build a hash table of id/type => key3 for fast access
$index = array();
foreach ($array1 as $data) {
    $index[$data['id'].'/'.$data['type']] = $data['key3'];
}

// use that hash table
foreach ($array2 as &$data) {
    $data['key3'] = $index[$data['id'].'/'.$data['type']];
}
// never forget to unset the variable if iterating by reference
unset($data);

为什么这么快:只有两个循环有N个迭代,其中N限定了元素的数量,因此这很复杂
O(N)
。哈希访问被认为是
O(1)
。所以整个复杂性是线性的。嵌套循环迭代将是
O(N^2)

在您当前的情况下,效率是一个明显的问题吗?或者您只是假设您的实现效率低下?