概要
閲覧数:2283
投稿日: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 )、など