Как я могу выбрать два уникальных случайным образом и массив и проверить, что это не равны с одним предварительно выбранным (значение по умолчанию)? Например у меня есть массив месяцев, как
$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);
?>
Вычислите разницу (получите месяцы, которые не $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);
Вы можете использовать этот простой процесс. Получить случайные значения, проверить, если они совпадают, повторите, если они не совпадают.
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;
}
}
}
Вы всегда можете добавить счетчик для обеспечения безопасности, чтобы компьютер не зацикливался вечно.