PHP: 将指定的子数组合并到新数组中?
PHP: Merge specified sub-arrays into new array?
我在 PHP 工作,我需要一个函数来将二维数组中用户指定的子数组合并到一个新数组中,例如
$arr = [
"sub_1" => [ "a", "b" ],
"sub_2" => [ "c", "d" ],
"sub_3" => [ "e", "f" ],
"sub_a" => [ 1, 2, 3 ],
"sub_b" => [ 4, 5, 6 ],
"sub_c" => [ 7, 8, 9 ]
];
merge_subs( $arr, [ "sub_1", "sub_2", "sub_3" ] );
// should return: [ "a", "b", "c", "d", "e", "f" ]
merge_subs( $arr, [ "sub_a", "sub_b", "sub_c" ] );
// should return: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
最有效的方法是什么?
编辑:
这是我尝试过的方法,但它不起作用,所以我显然做错了什么。
function merge_subs( $arr, $subs ){
$new = [];
foreach( $subs as $sub ){
array_push( $new, $arr[$sub] );
}
return array_merge( $new );
}
编辑 2:
我意识到我遗漏了省略号,现在我可以使用它了。无论如何,我想知道是否有更好的方法来完成这个。
您正在寻找$new = array_merge($new, $arr[$sub]);
<?php
$arr = [
"sub_1" => [ "a", "b" ],
"sub_2" => [ "c", "d" ],
"sub_3" => [ "e", "f" ],
"sub_a" => [ 1, 2, 3 ],
"sub_b" => [ 4, 5, 6 ],
"sub_c" => [ 7, 8, 9 ]
];
function merge_subs( $arr, $subs ){
$new = [];
foreach( $subs as $sub ){
$new = array_merge($new, $arr[$sub]);
}
return $new;
}
print_r(merge_subs( $arr, [ "sub_1", "sub_2", "sub_3" ] ));
// should return: [ "a", "b", "c", "d", "e", "f" ]
print_r(merge_subs( $arr, [ "sub_a", "sub_b", "sub_c" ] ));
结果:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
接受的答案通过获取一组键和循环来满足您的需求,但为什么呢?只需指定要合并的键:
$result = array_merge($arr[ "sub_1"], $arr["sub_2"], $arr["sub_3"]);
比循环更复杂,但为了好玩:
function merge_subs($array, $keys) {
return array_merge(...array_values(array_intersect_key($array, array_flip($keys))));
}
- 从
$arr
中获取与 $keys
相同的元素 array_intersect_key
- 获取值
array_values
- 像在第一个示例中那样合并它们
...
我在 PHP 工作,我需要一个函数来将二维数组中用户指定的子数组合并到一个新数组中,例如
$arr = [
"sub_1" => [ "a", "b" ],
"sub_2" => [ "c", "d" ],
"sub_3" => [ "e", "f" ],
"sub_a" => [ 1, 2, 3 ],
"sub_b" => [ 4, 5, 6 ],
"sub_c" => [ 7, 8, 9 ]
];
merge_subs( $arr, [ "sub_1", "sub_2", "sub_3" ] );
// should return: [ "a", "b", "c", "d", "e", "f" ]
merge_subs( $arr, [ "sub_a", "sub_b", "sub_c" ] );
// should return: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
最有效的方法是什么?
编辑:
这是我尝试过的方法,但它不起作用,所以我显然做错了什么。
function merge_subs( $arr, $subs ){
$new = [];
foreach( $subs as $sub ){
array_push( $new, $arr[$sub] );
}
return array_merge( $new );
}
编辑 2:
我意识到我遗漏了省略号,现在我可以使用它了。无论如何,我想知道是否有更好的方法来完成这个。
您正在寻找$new = array_merge($new, $arr[$sub]);
<?php
$arr = [
"sub_1" => [ "a", "b" ],
"sub_2" => [ "c", "d" ],
"sub_3" => [ "e", "f" ],
"sub_a" => [ 1, 2, 3 ],
"sub_b" => [ 4, 5, 6 ],
"sub_c" => [ 7, 8, 9 ]
];
function merge_subs( $arr, $subs ){
$new = [];
foreach( $subs as $sub ){
$new = array_merge($new, $arr[$sub]);
}
return $new;
}
print_r(merge_subs( $arr, [ "sub_1", "sub_2", "sub_3" ] ));
// should return: [ "a", "b", "c", "d", "e", "f" ]
print_r(merge_subs( $arr, [ "sub_a", "sub_b", "sub_c" ] ));
结果:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
接受的答案通过获取一组键和循环来满足您的需求,但为什么呢?只需指定要合并的键:
$result = array_merge($arr[ "sub_1"], $arr["sub_2"], $arr["sub_3"]);
比循环更复杂,但为了好玩:
function merge_subs($array, $keys) {
return array_merge(...array_values(array_intersect_key($array, array_flip($keys))));
}
- 从
$arr
中获取与$keys
相同的元素array_intersect_key
- 获取值
array_values
- 像在第一个示例中那样合并它们
...