web-dev-qa-db-ja.com

PHP連想配列からランダムな要素を選択する

PHPに連想配列があり、そこからランダムなキーと値のペアを選択したいと思います。これまでのところ、次のようになっています。

初期化します。

$locations = array();

SQLクエリをループし、キーと値のペアを追加します。

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

後で、配列のランダムなインデックスを選択します。

$Rand = array_Rand($locations);

ランドは単なる数字です。したがって、locations [$ Rand]は次のようになります。

'1' => 'Location 1'

OK、連想配列要素です。この時点では、この連想配列のキーがわからないので、次のことを試しました。

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つの試みはどれも機能しません。それらはすべて、「渡された変数は配列ではありません」などのエラーをスローします。

配列からランダムなキーと値のペアを抽出できる単純な1つのライナーがあると確信しています。または、構文がオフになっています。私は本当に助けていただければ幸いです。

18
Jeff
$array = array('a' => 1, 'b' => 2);
$key = array_Rand($array);
$value = $array[$key];
29
Arnaud Le Blanc

array_Rand() は、値ではなく、配列からキーを返します。あなたはただ使うことができます:

$location_name = $locations[$Rand];

場所の名前を取得します。


完全な例を次に示します: http://codepad.org/zR2YdMGN

[送信]を数回クリックするだけで、ランダムに機能することがわかります。

5
Paulpro

あなたのプッシュは間違っています

$locations[$location_id] = $location_name;

そのはず

したがって、質問でランダムな要素を選択することについては何もありません。
コードを使用する前に適切なデータがあるかどうかを確認するために、常にコードをデバッグしてください

1