PHP数组密钥对值传递的复杂性问题
我有两个数组。array1和array2是相同的,只是array2的子阵列没有键“key3”,并且子阵列的顺序不匹配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=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)
在您当前的情况下,效率是一个明显的问题吗?或者您只是假设您的实现效率低下?