У меня есть массив булевых, из которого я хочу выбрать случайный индекс, значение которого истинно и значение false.Выберите случайный индекс массива с условием на значение
Я могу, конечно, сделать это с помощью грубой силы, выбирая индексы, пока я не ударил одного, значение которого верно:
$arr = array(true, false, false, true, false, true);
var_dump($arr);
$i = array_rand($arr);
while(!$arr[$i])
{
$i = array_rand($arr);
}
$arr[$i] = false;
var_dump($arr);
Это создает что-то вроде этого, где четвертый элемент был изменен.
array(6) {
[0]=>
bool(true)
[1]=>
bool(false)
[2]=>
bool(false)
[3]=>
bool(true)
[4]=>
bool(false)
[5]=>
bool(true)
}
array(6) {
[0]=>
bool(true)
[1]=>
bool(false)
[2]=>
bool(false)
[3]=>
bool(false)
[4]=>
bool(false)
[5]=>
bool(true)
}
Однако, я должен выполнить эту операцию несколько раз со значительно большим массивом. В какой-то момент массив почти полностью ложный, и в этом случае метод грубой силы довольно неэффективен.
Есть ли более элегантный метод решения этой проблемы? Любая функция array_rand()
, где я могу дать предварительное условие?
Вы планируете запустить это в цикле или что-то подобное что будет делать каждую «истинную» запись в какой-то момент? –