Например, у меня есть массив:
$x = array("a", "b", "c", "d", "e");
Есть ли какая-либо функция для перебора всех значений массива и дублирования значений в:
$x = array("a", "a", "b", "b", "c", "c", "d", "d", "e", "e");
Я не нашел никакого связанного решения после того, как какое-то время гуглил его.
Большое спасибо!
Каково ваше фактическое использование этой техники? Хранение избыточных данных не пахнет передовым опытом. Что ты делаешь, фактически?
это не то похожее чувак! Это трудно объяснить, но мой проект требует некоторых условий, при которых я должен удвоить значения, чтобы я мог прочитать их дважды, когда я foreach. Извините, если есть другой более эффективный способ сделать это, но сейчас я просто думаю об этом.
Это точно так же, за исключением порядка элементов. Корректировка ваших данных не является решением вашей проблемы с кодированием.
foreach($a as $b){ echo $b; echo $b;}Нет нет. Это похоже на то, что у меня есть два поля, и я должен повторять уникальное значение для обоих полей каждый раз, когда я foreach.
Никогда не поздно прояснить вашу проблему с кодированием. Я проголосовал за закрытие как неясное. Из вашего опубликованного вопроса и примера данных неясно, в чем именно вам нужна помощь.
@mickmackusa Я думаю, ты на правильном пути. Более внимательное изучение этого вопроса сильно пахнет XY-проблема






Похоже на достаточно простое сокращение (с использованием 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)
Я рекомендую изменить тело функции сокращения на: return array_merge($arr, array_pad([], $times, $val)); - таким образом можно легко изменить $times - добавить use ($times) в объявление функции сокращения
@dWinder Я понимаю, что ты имеешь в виду. Я чувствую, что мог бы сделать что-то более лаконичное, используя оператор PHP шлепок. я подумаю об этом
Не уверен, что для этого есть библиотечная функция, но вы ищете что-то вроде этого:
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;
}
}
Аналогично: stackoverflow.com/q/8234899/2943403