提问人:NulisDefo 提问时间:2/24/2020 最后编辑:NulisDefo 更新时间:3/8/2020 访问量:71
将多维数组减少 1 的算法复杂度
algorithm complexity of reducing multidimensional array by 1
问:
示例数组(级别或成员的数量可能不同。
$dataset_groups = array(
'first_level1_group' => array(
array(
'fname' => 'John',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
),
'second_level1_group' => array(
array(
'fname' => 'Adam',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
array(
'fname' => 'Jane',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pineapple'),
),
),
'third_level1_group' => array(
array(
'fname' => 'Andrew',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
array(
'fname' => 'Ross',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pineapple'),
),
),
);
我想让它变成类似的东西(摆脱,等等)first_level1
$dataset_groups = array(
array(
'fname' => 'John',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
array(
'fname' => 'Adam',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
array(
'fname' => 'Jane',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pineapple'),
),
array(
'fname' => 'Andrew',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pear'),
),
array(
'fname' => 'Ross',
'lname' => 'Smith',
'favourite_fruit' => array('apple', 'pineapple'),
),
);
问题是像这样的东西
foreach ($dataset_groups as $group_key => $group) {
if (empty($dataset)) {
$dataset = $group;
} else {
$dataset = array_merge($dataset, $group);
}
}
会更有效(我认为这应该是 O(n) 复杂性)还是这个(正如我在其中一个建议中发现的那样)?$dataset = call_user_func_array('array_merge', $dataset_groups);
由于我不知道它的内部运作方式,我很难确定(尽管我有一种感觉,它几乎是一样的)。call_user_func_array()
编辑1:基本上我想知道除了可读性之外,是否还有切换到的理由。call_user_func_array()
答:
0赞
jspit
3/8/2020
#1
您还可以将 array_reduce() 与匿名函数一起使用,而不是 foreach 循环。
$newArray = array_reduce($dataset_groups,
function($carry, $item){
return array_merge($carry,$item);
}, []
);
评论
array_values()
array_values()
['first_level1']
call_user_func_array
array_merge
call_user_func_array