Как из такого 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? С примерами, на каких то аналогиях, на котиках). А то встречаю новые функции и не совсем понимаю как их применить.

→ Ссылка