• Теория
  • Теория

Функция shuffle, перемешиваем массив

Мы вывели на страницу три случайных промо-товара. Но кажется, что товары не совсем случайны. Первым почти всегда оказывается дешёвый товар, а третьим — новый. Почему так?

Дело в том, что функция array_rand выбирает случайные элементы, но возвращает их в том порядке, в каком они идут в исходном массиве.

Представим, что у нас есть массив с числами и что мы хотим получить из него три случайных числа:

$array = [0, 1, 2, 3, 4, 5, 6];
$random_numbers = array_rand($array, 3);

В исходном массиве числа идут по возрастанию. Поэтому в $random_numbers может оказаться массив [0, 5, 6] или [1, 2, 4]. Но мы точно не получим массив [6, 0, 2] или [3, 2, 1], потому что в них числа выстроены не в том порядке.

Как сделать так, чтобы числа в $random_numbers не зависели от порядка в исходном массиве? Используем встроенную функцию shuffle. Она принимает массив и перемешивает его элементы. Будьте осторожны, функция shuffle изменяет переданный ей массив и не сохраняет ключи. С ассоциативными массивами её лучше не использовать.

shuffle($random_numbers);

Теперь числа в $random_numbers выстроятся в случайном порядке.

На главной странице интернет-магазина показываются случайные товары из массива $promo_products. В нём сначала идут дешёвые товары, а после — новые. Поэтому и на страницу чаще всего первым выводится дешёвый товар, а последним — новый.

Чтобы промо-товары на странице показывались в свободном порядке, их нужно перемешать. Но использовать функцию shuffle с ассоциативным массивом $promo_products нельзя, ведь тогда мы лишимся правильных идентификаторов товара. Вместо этого перемешаем массив $random_ids. У него нет ключей, только индексы, которые для этой задачи не важны. Перемешивать его безопасно.

Перемешаем массив $random_ids и убедимся, что теперь случайные товары выводятся в случайном порядке.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Массивы и функции в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.