PHP数组密钥对的复杂性问题值转移

时间:2011-02-01 13:31:27

标签: php arrays multidimensional-array

我有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循环来完成任务,这将是非常昂贵的

有没有什么方法可以更简单,更快地完成任务?

1 个答案:

答案 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)