Как чередовать дублировать массив в php? - PullRequest
0 голосов
/ 08 марта 2019

Например, у меня есть массив:

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

Есть ли какая-либо функция для итерации всех значений массива и дублирования значений в:

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

Я не нашел какого-либо связанного решения после того, как некоторое время гуглил его.

Большое спасибо!

Ответы [ 3 ]

4 голосов
/ 08 марта 2019

Выглядит как довольно простое сокращение (используя array_reduce())

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

Демо ~ https://3v4l.org/eNH8a


Только что понял, что "сокращение" звучит немного забавно, так как мы увеличиваем массив. Думайте об этом больше как преобразование . Смотри https://en.wikipedia.org/wiki/Reduce_(parallel_pattern)

1 голос
/ 08 марта 2019

Итерирование по массиву и сохранение значений в новом массиве - простое решение.

$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;
    }
}
0 голосов
/ 08 марта 2019

Не уверен, что для этого есть библиотечная функция, но вы ищете что-то вроде этого:

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"
}

...