2011-08-26 19 views
15

私はPHPで連想配列を持っており、そこからランダムなキー/値の組を選択したいと考えています。これまで私が持っているものは次のとおりです。PHP連想配列からランダムな要素を選択

初期化。

$locations = array(); 

SQLクエリをループして、追加のキー/ヴァルのペア:

$rand = array_rand($locations); 

ランドは単なる数である:後で

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

は、私は、配列のランダムなインデックスを選択します。だから、場所[$ rand]は次のようなものです:

'1' => 'Location 1' 

いいね、assoc配列要素。この時点で、私はこのassoc配列の鍵を知らないので、私は以下のことを試みました:

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

これら3つの試みはどれも動作しません。それらはすべて "Passed変数は配列ではありません"のようなエラーをスローします。

配列からランダムなキー/値のペアを抜き取ることができる単純な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

あなたはすべて正しかった、もちろん - 私はちょうどサンプルコードでうまくいくこの1つのBCを選んだ。そして、ええ、私はプッシュが正しいのではないかとかなり恥ずかしいです。私はperl(wハッシュ)で1トンをコード化するので、私はよく知っていたはずです!ありがとうございました! – 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'は単なる数字です)は間違っています。私はこの主張を検証しないほど愚かでした。 –

関連する問題