2017-07-22 81 views
2

我有一個由0-100的隨機數組成的php數組。php數組 - 搜索值超過0的隨機密鑰

我想弄清楚從數組中選取一個大於零的隨機鍵的最乾淨和最簡單的方法。最終,我通過循環數組,減去隨機密鑰值每個循環

僞代碼:

$num_array = array(100,50,60,40,0,30,0,20); 

for ($x = 0; $x < 100; $x++) { 
    $rnd = RANDOM $num_array KEY WHERE > 0 
    $num_array[$rnd] = $num_array[$rnd] - 10; 
} 

如何處理這有什麼建議?

編輯:一旦循環結束我還是希望我的數組包含0(原件和減法之後的任何新的),並且所有的關鍵崗位必須是完整的前

+0

爲什麼選擇一個隨機前未過濾零出數組的? – trincot

回答

1

1:簡單適用array_filter它會過濾來自陣列

第二zeros應用array_rand功能

<?php 

$nums = [70, 100, 40, 30, 0, 45, 10]; 

$new_nums = array_filter($nums); 

$key = array_rand($new_nums , 1); 

echo $new_nums [$key]; 

?> 
+0

謝謝,一旦循環結束,我仍然希望我的數組包含0和所有關鍵位置原樣完好無損,這是否會這樣做? – user1022585

+0

如果你想保留原始數組意味着只需更改varibale名稱。檢查我更新的答案。 @ user1022585 – JYoThI

0

首先,你需要建立一個不包含零的數組。

pos_nums=array(); 
foreach ($nums as $num) { 
    if ($num > 0) $pos_nums[] = $num; 
} 

PHP有array_rand功能記錄here

如果你打電話

$pos_rand_keys = array_rand($pos_nums, 1);

然後$pos_rand_keys[0]將是一個隨機值。

+0

如果將array_rand放入循環並且如果不是0則不會更容易? – Jeff

+0

如果您必須「繼續嘗試」來選擇隨機值,則隨機性會降低。最好先對陣列進行預處理,以便獲得一個好的數據集,然後進行一次隨機選擇。 –

1

我建議先刪除零,並且只有然後選擇一個隨機值:

$nums = [70, 100, 40, 30, 0, 45, 10]; 
$temp = array_values(array_filter($nums)); 
$random = $temp[mt_rand(0, count($temp) - 1)]; 

NB:隨機值根據上the PHP documentation page用戶註釋選擇。