1

PHP の配列から任意の数のランダムな要素を取得したいと考えていました。関数が配列からarray_rand()任意の数のランダムキーを取得することがわかります。私がオンラインで見つけたすべての例は、キー参照を使用して配列から実際の値を取得することを示していました。

$random_elements = array();
$random_keys = array_rand($source_array);
foreach ( $random_keys as $random_key ) {
  $random_elements[] = $source_array[$random_key];
}

それは私には面倒に思えました。もっと簡潔にできると思っていました。キーの代わりにランダムな要素を単純に返す関数、またはキーを要素に変換できる関数のいずれかが必要になるため、次のようなことができます。

$random_elements = keys_to_elements(array_rand($source_array, $number, $source_array));

しかし、マニュアルやグーグルでそのような機能は見つかりませんでした。私は明らかなことを見落としていますか?

4

3 に答える 3

1

別の解決策は、配列をシャッフルして、その先頭からスライスを返すことです。

または、配列を変更したくない場合は、次のようにします。

array_intersect_key($source_array, array_combine(
    array_rand($source_array, $number), range(1, $number)));

これは、array_intersectキーまたは値で機能するため、少しハックですが、ある配列から別の配列の値と一致するキーを選択することはできません。したがって、array_combineこれらの値を別の配列のキーに変換するために使用する必要があります。

于 2012-01-19T18:35:50.390 に答える
1

ウスンはarray_flipどうですか?ちょうど私の頭に浮かんだ:

$random_elements =  array_rand(array_flip($source_array), 3);

まず、配列を反転してその値をキーにしてから、 を使用しますarray_rand

于 2012-01-19T18:42:59.710 に答える
0

あなたはこのようなことをすることができますが、テストされていません!!!

array_walk(array_rand($array, 2), create_function('&$value,$key', '$value = '.$array[$value].';'));

于 2012-01-19T18:41:30.500 に答える