我有一個PHP腳本,我有一個整數數組,例如$forbidden
。帶條件的隨機整數
我想從1到400得到一個不在$forbidden
中的隨機整數。
當然,我不想在rand給出工作結果時斷開任何循環。我想要更有效的東西。
你是如何做到這一點的?
我有一個PHP腳本,我有一個整數數組,例如$forbidden
。帶條件的隨機整數
我想從1到400得到一個不在$forbidden
中的隨機整數。
當然,我不想在rand給出工作結果時斷開任何循環。我想要更有效的東西。
你是如何做到這一點的?
將所有禁止的數字放在數組中,並使用從range(1,400)
。你會得到一組允許的數字,隨機選擇一個與array_rand()
。
<?php
$forbidden = array(2, 3, 6, 8);
$complete = range(1,10);
$allowed = array_diff($complete, $forbidden);
echo $allowed[array_rand($allowed)];
這樣,你從選擇集中移除排除數字,並抵消了循環:)
我不知道array_diff,正在尋找它一段時間!謝謝你的答案。 – Cydonia7
產生允許號碼的陣列的需要。找出這個數組中的數字。隨機選擇一個。
爲什麼循環無效? –
@MichaelRobinson:這不是有效的,因爲$ forbidden可能非常大。 Paul:我想過讓一個數組中的所有整數都可以,然後從中得到一個樣本,但我想知道是否有更好的語言 – Cydonia7
@MichaelRobinson:循環無效,因爲理論上你可能會遇到禁止的數字連續1000000次(但如果發生這種情況,你可能應該去填寫一些彩票),但是。 –