【发布时间】:2018-01-22 11:18:58
【问题描述】:
我有两个数组,例如:
$a = [
0 => [
'price' => 5.5
],
1 => [
'price' => 6.0
],
2 => [
'price' => 6.2
],
3 => [
'price' => 6.5
],
];
$b = [
0 => [
'color' => 'RED'
],
1 => [
'color' => 'WHITE'
],
2 => [
'color' => 'BLUE'
],
3 => [
'color' => 'RED'
],
];
我应该有这样的回应:
Array
(
[0] => Array
(
[price] => 5.5
[color] => RED
)
[1] => Array
(
[price] => 6
[color] => WHITE
)
[2] => Array
(
[price] => 6.2
[color] => BLUE
)
[3] => Array
(
[price] => 6.5
[color] => RED
)
)
我听说过这个函数:array_merge_recursive,但响应不是必需的:
Array
(
[0] => Array
(
[price] => 5.5
)
[1] => Array
(
[price] => 6
)
[2] => Array
(
[price] => 6.2
)
[3] => Array
(
[price] => 6.5
)
[4] => Array
(
[color] => RED
)
[5] => Array
(
[color] => WHITE
)
[6] => Array
(
[color] => BLUE
)
[7] => Array
(
[color] => RED
)
)
所以我决定编写自己的函数:
function merge ($a, $b) {
$keys = array_keys($a);
foreach ($keys as $value) {
if (isset($b[$value])) {
$tmp = array_keys($b[$value]);
foreach ($tmp as $val){
$a[$value][$val] = $b[$value][$val];
}
}
}
return $a;
}
print_r(merge($a, $b));
我得到了正确的回应:
Array
(
[0] => Array
(
[price] => 5.5
[color] => RED
)
[1] => Array
(
[price] => 6
[color] => WHITE
)
[2] => Array
(
[price] => 6.2
[color] => BLUE
)
[3] => Array
(
[price] => 6.5
[color] => RED
)
)
问题是它适用于小数组但不适用于大数组,所以我的问题是:如何优化函数?因为复杂性会根据合并的键而增加。
使用 PHP 7.0
【问题讨论】:
标签: php arrays function merge time-complexity