2011-08-26 183 views
15

我在PHP中有一個關聯數組,並且希望從中選擇一個隨機的鍵/值對。這是我到目前爲止:從PHP關聯數組中選擇一個隨機元素

初始化。

$locations = array(); 

遍歷一個SQL查詢,並添加鍵/纈氨酸對:

array_push($locations, "'$location_id' => '$location_name'"); 

後來,我選擇陣列的隨機指數:

$rand = array_rand($locations); 

蘭特只是一個數字。所以位置[$蘭特]給了我類似的東西:

'1' => 'Location 1' 

好,一個assoc數組元素。在這一點上,我不知道這ASSOC陣的鑰匙,所以我嘗試了以下幾件事:這3次工作

foreach($locations[$rand] as $loc_id => $location_name) { 
    echo "$key : $value<br/>\n"; 
} 

$loc_id, $location_name = each($locations[$rand]); 

$location_name = $locations[key($rand)]; 

無。他們都拋出像「通過變量不是數組」的錯誤。

我確定有一些簡單的1班輪可以從數組中抽取一個隨機的鍵/值對。或者我的語法關閉。我真的很感激幫助。

回答

26
$array = array('a' => 1, 'b' => 2); 
$key = array_rand($array); 
$value = $array[$key]; 
+0

你的問題是'array_push($ locations,''$ location_id'=>'$ location_name'「) ;'。代之以:'$ locations [$ location_id] = $ location_name;'。然後'array_rand($ location)'將返回一個隨機的'$ location_id';你可以用'$ name = $ locations [$ location_id]'來獲取名字。 – arnaud576875

+0

你們都是正確的,當然 - 我只是選擇了這一個BC我最好的工作與示例代碼。是的,我非常尷尬的推動不正確。我在Perl中編寫了一噸(w哈希),所以我應該知道更好!謝謝! – Jeff

+0

不錯,你救了我的一天 – RezaSh

1

你推錯了

$locations[$location_id] = $location_name; 

應該

所以,沒有什麼關於你的問題選擇隨機元素。
總是調試代碼,只是爲了看看,如果你使用它

4

array_rand()返回該數組,而不是價值的關鍵前有正確的數據。您可以使用:

$location_name = $locations[$rand]; 

獲取位置名稱。


這裏有一個完整的例子:http://codepad.org/zR2YdMGN

只需點擊提交幾次,你會看到隨機工作。

+0

這仍然沒有給出關鍵。 –

+0

@M_rk鑰匙在'$ rand' – Paulpro

+0

好的,對不起。然後來自OP的聲明('$ rand'只是一個數字)是錯誤的。我很愚蠢,不能證實這一說法。 –

相關問題