Выберите два уникальных случайных числа из массива, если они не равны заданному значению

Как я могу выбрать два уникальных случайным образом и массив и проверить, что это не равны с одним предварительно выбранным (значение по умолчанию)? Например у меня есть массив месяцев, как

 $months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

и данный месяц $alreadyin = "Feb"; Теперь мне нужно выбрать два уникальных месяца, которые не равны $alreadyin?

<?php
$alreadyin = "Feb";
$months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
$rand_months = array_rand($months, 2);
?>

1

Решение

Вычислите разницу (получите месяцы, которые не $alreadyin), а затем выберите 2 случайным образом:

$rand_months = array_rand(array_diff($months, [$alreadyin]), 2);

Вы также можете найти и удалить $alreadyin:

unset($months[array_search($alreadyin, $months)]);
$rand_months = array_rand($months, 2);

array_rand возвращает случайные ключи из массива, поэтому вам может понадобиться что-то вроде:

foreach($rand_months as $key) {
echo $months[$key];
}

Чтобы получить реальные названия месяцев, используя первый пример, перемешайте массив и фрагмент 2:

$months = array_diff($months, [$alreadyin]);
shuffle($months);
$rand_months = array_slice($months, 0, 2);

Или используя второй пример:

unset($months[array_search($alreadyin, $months)]);
shuffle($months);
$rand_months = array_slice($months, 0, 2);
4

Другие решения

Вы можете использовать этот простой процесс. Получить случайные значения, проверить, если они совпадают, повторите, если они не совпадают.

function getUniqueMonth( $alreadyin ) {
$months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

while( true ) {
$rand_months = array_rand( $months, 2 );
if ( !in_array( $alreadyin, $rand_months ) ) {
return $rand_months;
}
}
}

Вы всегда можете добавить счетчик для обеспечения безопасности, чтобы компьютер не зацикливался вечно.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector