【问题标题】:PHP how to combine array and create new arrayPHP如何组合数组并创建新数组
【发布时间】:2021-12-13 21:54:58
【问题描述】:

我有 3 个这样的数组:

$first = array(
    [0] => 13
    [1] => 66
    [2] => 15
)

$second = array
(
    [0] => append
    [1] => prepend
    [2] => append
)

$third = array
(
    [0] => 2
    [1] => 4
    [2] => 1
)

现在我想组合这 3 个数组并创建新的 SINGLE 数组,如下所示: 我想从每个数组中获取值并将其合并为一个。

$new_array = array(

    [0] = array (
        'page'=>13,
        'position'=>'append'
        'priority'=>'2'
    )
    [1] = array (
        'page'=>66,
        'position'=>'prepend'
        'priority'=>'4'
    )
    [2] = array (
        'page'=>15,
        'position'=>'append'
        'priority'=>'1'
    )
)

如何做到这一点?

【问题讨论】:

  • 您正在从第一个数组获取页面,从第二个数组获取位置,从第三个数组获取优先级。一个简单的foreach() 有什么问题?使用其中一个数组作为获取索引 (foreach (array_keys($first) as $k) {) 的指南,然后从 [ 'page' => $first[$k], 'position' => $second[$k], 'priority' => $third[$k] ] 构建新的数组元素。然后将该元素追加到不断增长的结果数组中。
  • 因为每个元素都有3个索引,你可以做一个for()循环,引用$first[$i]$second[$i]$third[$i]并构造一个新数组。你有什么尝试吗?您需要展示您的尝试以及您面临的任何问题; Stackoverflow 不是免费的编码服务
  • 好的@lserni 为我工作。我明白了。
  • 你放弃了吗???
  • @abracadaver ,不,我正在排灯节假期。在印度,庆祝排灯节

标签: php arrays multidimensional-array array-merge


【解决方案1】:

您可以使用array_map() 遍历多个数组(长度相同)并从中逐项构建一个新数组:

$first = array(13, 66, 15);
$second = array('append', 'prepend', 'append');
$third = array(2, 4, 1);

print_r(
    array_map(
        function($page, $position, $priority) {
            return compact('page', 'position', 'priority');
        },
        $first,
        $second, 
        $third
    )
);

虽然在这种情况下,foreach() 可能是一个简单的结构。

编辑: 版本 2。有些人可能会认为这更糟,因为可读性和代码可维护性。感谢 AbraCadaver

$keys = ['page', 'position', 'priority'];

// Note: The order in $keys and array_map() arguments must be the same
// On the other hand you only need to type the keys once and it's easy
// to change the number of arguments :)

print_r(
    array_map(
        function(...$args) use ($keys) {
            return array_combine($keys, $args);
        },
        $first,
        $second, 
        $third
    )
);

编辑: 版本 3。使用更现代的 PHP (7.4) 和箭头函数:

print_r(
    array_map(
        fn(...$args) => array_combine($keys, $args),
        $first,
        $second, 
        $third
    )
);

【讨论】:

  • compact,太好了!
  • @AbraCadaver 是的,有人喜欢,有人不喜欢 :)。但我认为在这种情况下它会节省一些重复键的输入。使用您的 $keys 方法和函数 args 可能会更进一步。我猜。但它的可读性也很好:)..
【解决方案2】:

如果你有相同的列,你可以这样做

$first = [13,66,15];
$second = ['append','prepend','append'];
$third = [2,4,1];

foreach($first as $v => $i){
    $new_array[] = [
    'page' => $i,
    'position' => $second[$v],
    'priority' => $third[$v],
    ];
}

print_r($new_array);

这是结果

【讨论】:

    【解决方案3】:

    只需映射每个数组的每个元素并返回一个带有键的数组:

    $result = array_map(function($f, $s, $t) {
                            return ['page'=>$f, 'position'=>$s, 'priority'=>$t];
                        }, $first, $second, $third);
    

    或者在函数外定义键,并与每个元素结合:

    $keys = ['page', 'position', 'priority'];
    $result = array_map(function($f, $s, $t) use($keys) {
                            return array_combine($keys, [$f, $s, $t]);
                        }, $first, $second, $third);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 2022-12-02
      • 2013-06-07
      相关资源
      最近更新 更多