2011-08-26 7 views
15

Tôi có một mảng kết hợp trong PHP và muốn chọn cặp khóa/giá trị ngẫu nhiên trong số đó. Dưới đây là những gì tôi có cho đến thời điểm này:Chọn một phần tử ngẫu nhiên từ một mảng kết hợp PHP

Khởi tạo.

$locations = array(); 

Loops thông qua một truy vấn SQL và thêm chìa khóa/cặp val:

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

Sau đó, tôi chọn một chỉ số ngẫu nhiên của mảng:

$rand = array_rand($locations); 

Rand chỉ là một con số . Vì vậy, vị trí [$ rand] mang lại cho tôi một cái gì đó như:

'1' => 'Location 1' 

OK, một phần tử mảng assoc. Tại thời điểm này, tôi không biết chìa khóa của mảng assoc này, vì vậy tôi đã thử những điều sau đây:

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)]; 

Không ai trong số 3 lần thử này hoạt động. Tất cả đều ném lỗi như "Biến đã qua không phải là mảng".

Tôi chắc chắn có một số lớp lót đơn giản 1 có thể lấy một cặp khóa/giá trị ngẫu nhiên từ mảng. Hoặc cú pháp của tôi bị tắt. Tôi thực sự đánh giá cao sự giúp đỡ.

Trả lời

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

Vấn đề của bạn nằm trong 'array_push ($ locations," '$ location_id' => '$ location_name' ") ; '. Thực hiện việc này thay vào đó: '$ locations [$ location_id] = $ location_name;'. Sau đó 'array_rand ($ location)' sẽ trả về một '$ location_id' ngẫu nhiên; và bạn có thể lấy tên với '$ name = $ locations [$ location_id]'. – arnaud576875

+0

bạn là tất cả chính xác, tất nhiên - tôi chỉ chọn một bc tôi làm việc tốt nhất với mã ví dụ. và vâng, tôi khá xấu hổ về sự thúc đẩy không chính xác. tôi mã một tấn trong perl (w băm) vì vậy tôi nên biết rõ hơn! CẢM ƠN BẠN! – Jeff

+0

đẹp, bạn đã lưu ngày của tôi – RezaSh

1

push của bạn là sai

$locations[$location_id] = $location_name; 

nó phải được

như vậy, không có gì về việc chọn lựa yếu tố ngẫu nhiên trong câu hỏi của bạn là.
luôn gỡ lỗi mã của bạn, chỉ để xem liệu bạn có dữ liệu thích hợp trước khi sử dụng nó hay không

4

array_rand() trả về một khóa từ mảng chứ không phải giá trị. Bạn chỉ có thể sử dụng:

$location_name = $locations[$rand]; 

Để lấy tên vị trí.


Dưới đây là một ví dụ đầy đủ: http://codepad.org/zR2YdMGN

Chỉ cần nhấp vào gửi một vài lần, bạn sẽ thấy làm việc ngẫu nhiên.

+0

Điều này vẫn không cung cấp khóa. –

+0

@M_rk Khóa nằm trong '$ rand' – Paulpro

+0

Ok, xin lỗi. Sau đó, yêu cầu bồi thường ('$ rand' chỉ là một số) từ OP là sai. Và tôi đã đủ ngu ngốc để không xác minh yêu cầu này. –