Как из такого PHP массива Array ( [1] => 1 [2] => 2 [3] => 1 ) повторить число 1 - 1 раз, число 2 - 2 раза, 3 - 1 раз
На входе есть массив, например:
$array = array('1', '2', '2', '3'); //Входящий массив
Из него я получаю число повторений:
$result = array_count_values($array); //считаем число повторений
Т.е. он стает вида Array ( [1] => 1 [2] => 2 [3] => 1 )
Как по правильному повторить число из ключа столько раз, сколько указано в значении?
На выходе чтобы получить из Array ( [1] => 1 [2] => 2 [3] => 1 ) такой?:
Array ('1','2','2','3')
На ум приходит только какой-то велосипед на подобии вытянуть все ключи через
array_keys($result) и крутонуть их значения в цикле fot столько то раз сколько указано значение... Hо как-то сильно сложно может есть лучшее решение?
Ответы (2 шт):
$arr = [1 => 1, 2 => 2, 3 => 1];
$result = [];
foreach ($arr as $key => $value) {
$result = array_merge($result, array_fill(0, $value, $key)); // $result = [...$result, ...array_fill(0, $value, $key)];
}
print_r($result);
Array
(
[0] => 1
[1] => 2
[2] => 2
[3] => 3
)
Ура! Заработало вот так (Спасибо Алексею за правильный путь и Ma3rX за правки)
Я правда не смог освоить как через array_map и str_repeat сделать... Поэтому немного корявувато дописал цикл но выдает то что нужно:
$array = array(1, 1, 3, 3, 1); //Входящий массив
$result = array_count_values($array); //считаем число повторений
//$allresult = []; //Пока без массива потом допишу
foreach ($result as $key => $value) {
$n = 0; //Сброс при каждом проходе чтобы запускался след цикл
for ($value; $n <= $value; $n++) {
echo str_repeat($key, $n) . ' ';
}
//$allresult = array_merge($allresult, array_fill(0, $value, $key));
}
Подаем на вход array(1, 1, 3, 3, 1); Получаем: 1 11 111 3 33
Подаем на вход array(5, 5, 5, 5, 5); Получаем: 5 55 555 5555 55555
Чудеса, но работает). А еще, если не тяжело, посоветуйте плиз какие-то может визуализации этих функций или учебники по PHP? С примерами, на каких то аналогиях, на котиках). А то встречаю новые функции и не совсем понимаю как их применить.