- Теория
- Теория
Функция 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
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.