我有2个数组。 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'
)
...
)
任务只是将key3及其值放到array2的相应子数组中。
我只能想到几个级别的foreach循环来完成任务,这将是非常昂贵的
有没有什么方法可以更简单,更快地完成任务?
答案 0 :(得分:2)
// 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)
。