如何在 php 中交错复制数组?

How to interleavedly duplicate an array in php?

例如,我有一个数组:

$x = array("a", "b", "c", "d", "e");

是否有任何函数可以迭代数组的所有值并将值复制到:

$x = array("a", "a", "b", "b", "c", "c", "d", "d", "e", "e");

google了一段时间也没有找到相关的解决方法。

非常感谢!

看起来是相当简单的缩减(使用 array_reduce()

$x = array_reduce($x, function($arr, $val) {
    array_push($arr, $val, $val);
    return $arr;
}, []);

演示~https://3v4l.org/eNH8a


刚意识到 "reduction" 听起来有点滑稽,因为我们正在扩大数组。将其更多地视为 转换 。参见 https://en.wikipedia.org/wiki/Reduce_(parallel_pattern)

不确定是否有这方面的库函数,但您是否正在寻找与此类似的东西:

function duplicate_array($array=array()) {
    $result = array();
    foreach($array as $elem) {
        $result[] = $elem;
        $result[] = $elem;
    }

    return $result;
}

这在理论上应该做你想做的。

$x = array("a", "b", "c", "d", "e");

var_dump($x);

$x = duplicate_array($x);

var_dump($x);

这应该输出:

array(5) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
}
array(10) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "a"
  [2]=>
  string(1) "b"
  [3]=>
  string(1) "b"
  [4]=>
  string(1) "c"
  [5]=>
  string(1) "c"
  [6]=>
  string(1) "d"
  [7]=>
  string(1) "d"
  [8]=>
  string(1) "e"
  [9]=>
  string(1) "e"
}

迭代数组并将值存储在新数组中是一个简单的解决方案。

$x =  array("a", "b", "c", "d", "e");
$result_array = [];
$repeat_x_times = 2;

foreach ($x as $element) {
    for ($i = 0; $i < $repeat_x_times ; $i++) {
        $result_array[] = $element;
    }
}