- 締切済み
array_randの改善・配列からランダムにキーを取得
Wernerの回答
- Werner
- ベストアンサー率53% (395/735)
shuffleして前から順番に取り出せばよい。 http://lgbt.org.pl/manual/ja/function.shuffle.php
関連するQ&A
- array_rand関数
現在、ランダム関数を使用して、配列にある値の中から ランダムにいくつかの配列を抜き出す処理を行っています。 $rand_keys = array_rand($id,2); for($k=0;$k<count($rand_keys);$k++){ $rand_id[$i][$k]=$id[$rand_keys[$k]]; } ただし、この関数では一つだけ取り出したい場合には使えません。 何かよい方法はありませんか??
- ベストアンサー
- PHP
- array_randを使いたい?
phpでarray_randを使ってCSVのデータをランダム表示させたいです。 phpの知識がなくどのようにすればいいかわかりません。 CSVは id,商品名,説明文,価格,画像URL,リンク先URL, こんな感じになっています。 いろいろと調べてランダムにするにはarray_randを使えばいいのがわかったのですが、どのようにPHPを書けばいいかわかりません。 すいませんが、詳しく教えていただけないでしょうか?よろしくお願いします。
- ベストアンサー
- PHP
- phpの二次元配列の値をランダムに取得したい
ちょっとわからないことがありますので、質問させて頂きます。MYSQLから取得したデータ(二次元配列)から、ランダムに値を10件取得したいと思っております。 実際、DBにクエリを投げる段階で、 "select id,name,description from teble order by rand()" をしても、そのテーブルにあるデータ全体から取得という感じになってしまいます。 新しく追加されたデータ10件から、ランダムに取得できないので、新しく追加されたデータ10件をまずDBから取得して、php側でその中からランダムに値を取得するしかないのかと思っております。 shuffle();等を使用したのですが、配列のキーをランダムに取得するような形で、その中身を一緒に取得することができません。 考えても私の知識では解決できませんので、お分かりになる方、ご教授くださいますようお願いいたします。
- 締切済み
- PHP
- 多次元配列で特定キーが重複している箇所をランダムで
PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい ・id基準 ■元配列 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [2] => Array ( [id] => 5 [name] => "鈴木" [age] => 12 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ■取得したいランダム結果配列例1 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) ■取得したいランダム結果配列例2 Array ( [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ※1次元目のキーは元キーを維持していなくても構いません
- ベストアンサー
- PHP
- array_randで要素が数字の場合の処理方法
PHPのarray_randについて教えて下さい。 下記のようなソースを作りましたが思った通りの結果になりません。 //(A) $test=array(3,5,8,11,14,24,26,28); print_r($test); foreach ($test as $val) { echo $val.'<br>'; } //(B) $keys = array_rand($test, 5);//決められた数を抽出 print_r($keys).'<br><br>'; foreach ($keys as $val) { echo $val.'<br>'; } Aの部分の結果は Array ( [0] => 3 [1] => 5 [2] => 8 [3] => 11 [4] => 14 [5] => 24 [6] => 26 [7] => 28 ) foreachの部分の出力↓ 3 5 8 11 14 24 26 28 となりこれは特に問題ありません。 Bの部分でAの配列から5つランダムで取り出したいのですが、結果は Array ( [0] => 0 [1] => 3 [2] => 5 [3] => 6 [4] => 7 ) 0 foreachの部分の出力↓ 0 3 5 6 7 となってしまい、Aの配列の添え字の中から5つの数字が選ばれるようになってしまいます。 Aの添え字ではなく「3,5,8,11,14,24,26,28」の数字から5つランダムで取り出すにはどのような書き方をすればよいのでしょうか? ご回答よろしくお願い致します。
- ベストアンサー
- PHP
- php 多次元配列において指定したキーの値を取得
いつも世話になっております。 PHPの初歩的な質問をさせてください。 多次元配列において指定したキーの値を取り出す方法はありますでしょうか。 array_searchの逆というべきでしょうか、値を検索するのではなくキーを検索してその値を取り出したいです。 イメージ例 $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $val = array_xxx($array, 0); // $val = 'blue'; みたいな感じの… 関数でなくてもまったく問題ありませんが… どうぞ、よろしくお願いいたします。
- ベストアンサー
- PHP
- phpで配列の時 $names = array(
phpで配列の時 $names = array('john','kate','bob') ; この右側のarrayは関数ですか?
- ベストアンサー
- PHP
- 比重をつけて連想配列の中からランダムに選び出す方法
PHP Version 5.1.6を使っています。 例えば $arr = array( 'key1' => array('name' => 'あ', 'weight' => 1), 'key2' => array('name' => 'い', 'weight' => 1), 'key3' => array('name' => 'う', 'weight' => 3), ); という連想配列があった時に、 weightの値によってランダムに選ばれる時の差をつけたいのですが、 具体的には、1が最も選ばれ易くて値が大きくなるにつれて選ばれ難くなるようにしたいです。 上の場合だと、key1とkey2が選ばれ易くてkey3は選ばれ難くなります。 逆(1が最も選ばれ難くて、値が大きくなるに連れて選ばれ易い)の場合は なんとかプログラムで表すことができたのですが、 この場合はどのような感じになるのでしょうか?
- ベストアンサー
- PHP
- 配列の次元を超えてランダムに選択したい
PHP5.2.4を使用しています。 例えば、次のような2次元以上の配列があったときに $arr[0][0] = array('a' => 1, 'b' => 11); $arr[0][1] = array('a' => 2, 'b' => 5); $arr[0][2] = array('a' => 3, 'b' => 20); $arr[1][0] = array('a' => 4, 'b' => 3); $arr[1][1] = array('a' => 5, 'b' => 30); この5つから、'b'の値が10以上の候補だけのインデックス($arr【[1][1]】←この部分)を ランダムに1つ選ぶ方法はどのようになるのでしょうか? 自分が考えたのは for ($i = 0; $i < count($arr); $i++) { for ($j = 0; $j < count($arr[$i]); $j++) { if ($arr[$i][$j]['b'] < 10) continue; $new_arr[] = array('index2' => $i, 'index1' => $j); } } $key = array_rand($new_arr, 1); print_r($new_arr[$key]); //Array ( [index2] => 0 [index1] => 0 ) //Array ( [index2] => 0 [index1] => 2 ) //Array ( [index2] => 1 [index1] => 1 ) //いずれかが選択される なんですが、これだとあまり良いやり方だと思わなくて なにか別のやり方はあるのでしょうか?
- 締切済み
- PHP
お礼
なるほど、ありがとうございます。