Как выбрать 10 случайных не повторяющихся чисел из массива на PHP?

Приветствую вас дорогие друзья! В этой небольшой заметке я приведу пример решения одного из вопросов по PHP.

Данный вопрос был задан одним из читателей данного блога, суть вопроса (задачи) заключалась в следующем:

Имеется массив, содержащий тысячу различных чисел. Числа могут повторять, но точно известно, что в массиве имеются как минимум десять различных (встречающихся один раз) чисел. Среди всех чисел исходного массива выбрать и вывести на экран только 10 не повторяющихся чисел.

Решение задачи

Решить данную задачу можно по-разному, я приведу одно из решений – рассмотрим алгоритм:

  1. Создадим дополнительный массив
  2. Объявим переменную, с помощью которой будем выходить из цикла
  3. С помощью случайного числа будем выбирать случайный элемент исходного массива
  4. Проверим выбранное число на вхождение в дополнительный массив, и если не входит, то добавляем
  5. Если размер дополнительного массива равен 10 – значит выходим из цикла
  6. Выводим отобранные числа на экран

Теперь давайте рассмотри реализацию данного алгоритма на PHP:

<?
        $default_array = array(576, 1657, 7,...,983); //Исходный массив
        $new_array = array(); //Новый (дополнительный) массив
        $end = 0; //Флаг окончания выборки
        
        while( $end == 0 ){
        
                $random = rand(1, 1000); //Случайное число от 1 до 1000

                if ( !in_array($default_array[$random], $new_array) )  $new_array[] = $default_array[$random];
                
                if( count($new_array) == 10 ) $end = 1;
        }
        
        //Выводим числа
        foreach( $new_array AS $item ){ 
                echo $item.'<br>';        
        }
?>

 

  • Переменная – “random” является индексом исходного массива.
  • Как только размер нового массива будет равен десяти, то есть когда мы выбираем 10 различных чисел, то присваиваем переменной – “end” единицу (можно другое число отличное от нуля) и выходим из цикла
    •  

      Я не стал перечислять все 1000 элементов исходного массива, чтобы сократить код.

      На этом у меня все, желаю вам удачи, пока!

      Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.