【问题标题】:PHP: Merge specified sub-arrays into new array?PHP:将指定的子数组合并到新数组中?
【发布时间】:2021-06-22 16:17:00
【问题描述】:

我正在使用 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:

我意识到我遗漏了省略号,现在我可以使用它了。无论如何,我想知道是否有更好的方法来实现这一点。

【问题讨论】:

  • 你给我们看看你是怎么做的,然后我们看看能不能提高效率
  • 您是否尝试过简单地浏览一下 PHP 手册?如果你找到了array_merge(),你可能已经找到了!
  • 我已经编辑了我的问题以反映我的尝试。
  • 如果您需要知道要处理哪个数组以及要合并的子数组的名称。这样做会更简单$x = array_merge($arr['sub_1'], $arr['sub_2'], $arr['sub_3']); print_r($x);

标签: php arrays merge


【解决方案1】:

您正在寻找$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
)

【讨论】:

  • 谢谢,正是我想要的!
【解决方案2】:

接受的答案通过获取一组键并循环来满足您的要求,但为什么呢?只需指定要合并的键:

$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
  • 像在第一个解包示例中那样使用... 合并它们

【讨论】:

  • 我指定我需要一个函数,以便可以根据需要对任何提供的数组和指定的子数组执行此操作。你能演示一个可以满足我需要并且不使用循环的函数吗?
  • 它仍然是另一个可行的选择,拥有它总是很好!
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2020-03-31
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
相关资源
最近更新 更多