プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、配列の要素をランダムに並び替える(ついでにキーと値の関係性も保持)
配列のランダム並び替えはこんだけφ(--)

shuffle([対象の配列]);

サンプルコードφ(--)

<?php 
    $ary = array("a", "b", "c", "d", "e");

    var_dump($ary);

    shuffle($ary);

    var_dump($ary);
?>

結果φ(--)

array(5) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
}
array(5) {
  [0]=>
  string(1) "c"
  [1]=>
  string(1) "d"
  [2]=>
  string(1) "a"
  [3]=>
  string(1) "b"
  [4]=>
  string(1) "e"
}

ちなみに連想配列の場合、キーが無くなる(新たに連番のキー(要素番号)が振られる)ので
ご注意ください。

サンプルコードφ(--)

<?php 
    $ary = array("a" => "A", "b" => "B", "c" => "C");

    var_dump($ary);

    shuffle($ary);

    var_dump($ary);
?>

結果φ(--)

array(3) {
  ["a"]=>
  string(1) "A"
  ["b"]=>
  string(1) "B"
  ["c"]=>
  string(1) "C"
}
array(3) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "C"
  [2]=>
  string(1) "B"
}

連想配列でキーを維持したままランダムに並び替えたければ
「array_keys()」関数でキー値のみ取り出してそれを並び替えた後に
対応する値を紐づけた連想配列を新たに作るってな流れですかね。

ほれサンプルφ(--)

<?php 
    $ary = array("a" => "A", "b" => "B", "c" => "C", "d" => "D", "e" => "E");

    var_dump($ary);

    //キー取り出し
    $aryKey = array_keys($ary);

    //キーを並び替え
    shuffle($aryKey);

    $newAry = array();    //結果を入れる配列

    //配列並び替え
    foreach($aryKey as $key){
        $newAry[$key] = $ary[$key];
    }

    var_dump($newAry);
?>

ほれ結果φ(--)

array(5) {
  ["a"]=>
  string(1) "A"
  ["b"]=>
  string(1) "B"
  ["c"]=>
  string(1) "C"
  ["d"]=>
  string(1) "D"
  ["e"]=>
  string(1) "E"
}
array(5) {
  ["c"]=>
  string(1) "C"
  ["a"]=>
  string(1) "A"
  ["d"]=>
  string(1) "D"
  ["e"]=>
  string(1) "E"
  ["b"]=>
  string(1) "B"
}

中々使いどころが難しい関数ではありますが、
私は自前のタグクラウドもどきを作成するときに使いました。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事