概要
閲覧数:2016
投稿日:2014-01-30
更新日:2014-01-30
・ 配列の中より、「ランダム」かつ「重複することなく」複数の値を抽出するユーザ定義関数
関数名
・randommultiple()
構文
・array randommultiple ( array $target, int $num )
引数
・samerank( ターゲット配列 抽出要素数 )
・第 1 引数 … ターゲット配列
・第 2 引数 … 抽出要素数。※抽出要素数が配列要素数を上回った場合は、何もしない(何も返さない)。抽出要素数が1より大きくない場合は、何もしない(何も返さない)
戻値
・array $result … 「ランダムに抽出した」かつ「重複しない要素」で構成された配列
コード
/* * 「ランダム」かつ「重複しない」複数要素を抽出する関数 * @param array $target ターゲット配列 * @param int $num 抽出要素数 * @return array $result 抽出した要素で構成された配列 * 抽出要素数が配列要素数を上回った場合は、何もしない(何も返さない) * 抽出要素数が1より大きくない場合は、何もしない(何も返さない) */ function randommultiple($target, $num){ // array_rand関数 // マニュアルによると、$targetに含まれる以上の数が$numに指定されると、 // WARNINGレベルの警告を吐くそうだ。 // array_rand関数が返すのはあくまでキーだから気をつけよう。 // デフォルトだとWARNINGはエラー吐くだけで停止せずに処理を実行すると思うが、 // 開発時はset_error_handlerなりで実行を中止するような仕組みを取り入れるだろう //echo count($target); //echo $num; if((count($target)>= $num)&&($num>1)){//抽出数が配列要素数を上回るケースを回避。また1以下だとforeachでエラーになる $result = array(); foreach (array_rand($target,$num) as $index){ //echo $index; //echo $target[$index]; array_push($result,$target[$index]); } return $result; } } //要素数4の配列から、「ランダム」かつ「重複しない」2つの要素を抽出 $target = array("a","b","c","d"); print_r(randommultiple($target,2));//第1引数…ターゲット配列、第2引数…抽出数(1より大きく、かつ、配列要素数以下)
結果
Array ( [0] => a [1] => d )、など