Перемешивание массивов

У меня есть 5 массивов их нужно перемешать. Например

shuffle($arr1)
shuffle($arr2)

Как-то можно перемешать их в одном shuffle? Так пробовал, но не работает.

$arr = [$arr1,$arr2,$arr3,$arr4,$arr5]
shuffle($arr)

Ответы (1 шт):

Автор решения: Алексей Р

Так у вас перемешаются, но не элементы внутри пяти массивов, а сами массивы внутри массива $arr.

Если вам нужно все-таки перемешать элементы внутри пяти массивов, то можно сделать это в цикле:

<?php

$arr1 = [1, 2, 3, 4, 5,];
$arr2 = [1, 2, 3, 4, 5,];
$arr3 = [1, 2, 3, 4, 5,];
$arr4 = [1, 2, 3, 4, 5,];
$arr5 = [1, 2, 3, 4, 5,];

$arrays = [&$arr1, &$arr2, &$arr3, &$arr4, &$arr5,];
foreach ($arrays as &$array) {
    shuffle($array);
}

echo implode(", ", $arr1), "\n";
echo "...\n";
echo implode(", ", $arr5), "\n";
?>
2, 3, 4, 1, 5
...
2, 3, 1, 5, 4

Вариант 2 — напишите свою функцию, которая будет принимать несколько аргументов:

function multi_shuffle(&...$arrays) {
    foreach ($arrays as &$array) {
        shuffle($array);
    }
}

$arr1 = [1, 2, 3, 4, 5,];
$arr2 = [1, 2, 3, 4, 5,];
$arr3 = [1, 2, 3, 4, 5,];
$arr4 = [1, 2, 3, 4, 5,];
$arr5 = [1, 2, 3, 4, 5,];

multi_shuffle($arr1, $arr2, $arr3, $arr4, $arr5,);

echo implode(", ", $arr1),"\n";
echo "...\n";
echo implode(", ", $arr5),"\n";
2, 5, 4, 1, 3
...
1, 3, 2, 5, 4
→ Ссылка