【问题标题】:array_merge based on integer valuearray_merge 基于整数值
【发布时间】:2018-08-30 20:43:35
【问题描述】:

假设我有一个可变数字变量 $num 可以包含任何整数,我有一个数组 $my_array 包含一些值,例如:

$my_array = ['a','b','c'];

例如,我想根据 $num 的值将另一个动态数组 $dyn_array 与 $my_array 合并。

假设 $num = 2,我想要:

$merged_array = array_merge($my_array, $dyn_array, $dyn_array);

如果 $num = 3,我想要:

$merged_array = array_merge($my_array, $dyn_array, $dyn_array, $dyn_array);

所以基本上根据 $num 的值在 array_merge 中添加 $dyn_array。

我将如何去做这样的事情?

感谢您的帮助

【问题讨论】:

    标签: php arrays php-5.5


    【解决方案1】:

    您可以使用... (the "splat" operator) 来扩展对array_fill 的调用结果,这将根据需要合并尽可能多的$dyn_array

    $num = 2;
    $result = array_merge($my_array, ...array_fill(0, $num, $dyn_array));
    

    https://3v4l.org/amCJu


    对于 5.6 之前的 PHP 版本,不支持 ...,您可以使用以下行代替:

    $result = array_reduce(
      array_fill(0, $num, $dyn_array),
      function($carry, $item) { return array_merge($carry, $item); },
      $my_array
    );
    

    它迭代来自array_fill 调用的相同副本,一次将它们合并到结果中。见https://3v4l.org/s7dvd

    【讨论】:

    • 这不是只有从 php 5.6 开始可用吗?
    • @user765368 是的,但是看到你用那个版本标记了你的问题,我认为这不是问题。
    • @user765368 有没有理由你还没有接受 iainn 的回答?您需要不同的技术吗?你对 splat 操作员有偏见吗?您实际上运行的是早期版本的 php 吗?
    • 对不起伙计们,不幸的是我在 php 5.5 下。我以为我在 5.6 以下,但事实并非如此。所以我需要一个不同的答案。但是感谢您的回答,这非常酷。
    • @user765368 我为早期 PHP 版本添加了一个选项
    【解决方案2】:

    考虑到您使用的是 PHP 5.5,我有一个更长的解决方法。

    $my_array = ['a','b','c'];
    
    $array_main[] = &$my_array;
    $array_main[] = [1, 2];
    $array_main[] = [4, 5];
    $array_main[] = ['etc', 'bla'];
    
    $iterations = count($array_main);
    
    for ($i = 1; $i < $iterations; $i++) {
        $array_main[0] = array_merge(
            $array_main[0], 
            $array_main[$i]
        );
    }
    
    echo '<pre>';
    print_r($my_array);
    

    我决定将数组作为第一个键并通过引用添加,因此我们将始终对其进行更新。

    然后我循环项目的数量 - 1,在原始数组中一个接一个地添加。

    代码在这里测试:https://3v4l.org/LF0CR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2017-04-14
      • 2014-08-05
      • 1970-01-01
      • 2010-10-22
      • 2014-09-12
      相关资源
      最近更新 更多