Standing on the Shoulder of Linus
現在地: / Home / 2012 / 1月 / 25 / 連想配列をランダムに並べ替える
印刷 メール ショートリンク

連想配列をランダムに並べ替える

投稿者 mizuno 作成日 2012年1月25日 in php

PHP には、shuffle という関数が用意されています。配列の順序をランダムに並べ替える関数ですが、連想配列にするとキー値の対応が保存されません。

連想配列をシャッフルする方法を探したところ、公式マニュアルを読むと、andjones さんの投稿に、

function shuffle_assoc($list) {
  if (!is_array($list)) return $list;

  $keys = array_keys($list);
  shuffle($keys);
  $random = array();
  foreach ($keys as $key)
    $random[$key] = $list[$key];

  return $random;
} 

というのがありました。なので、この関数についてテストしてみました。

class ShuffleAssocTest extends PHPUnit_Framework_TestCase {
	private $array = array();
	private $array_shuffled = array();
	public function setUp() {
		$this->array = array(
					'akey' => 'aval',
					'bkey' => 'bval',
					'ckey' => 'cval',
					'dkey' => 'dval',
		);
		$this->array_shuffled = shuffle_assoc($this->array);
	}
	public function testLengthPreserved() {
		// 配列の長さが保存されるか
		$this->assertEquals(sizeof($this->array_shuffled), sizeof($this->array));
	}
	public function testKeysPreserved() {
		// シャッフル後、キーが保存されるか
		foreach ($this->array as $key => $val) {
			$this->assertArrayHasKey($key,$this->array_shuffled);
		}
	}
	public function testValuesPreserved() {
		// シャッフル後、キー値の対応が保存されるか
		foreach ($this->array as $key => $val) {
			$this->assertEquals($val,$this->array_shuffled[$key]);
		}
	}
}

ランダムに並べかえられたことの直接のテストではありませんが(ここを上手くテストする方法があれば教えてください)、この関数で処理しても、配列の要素がきちんと並んでいることが確認できました。

PHPUnit では、xDebug 拡張を利用してコードカバレッジをチェックできるようです。

シェア: Mixx Delicious Digg Facebook Twitter
テスト単体テスト
返信をキャンセル
← 前へ 次へ →

良く見られている記事

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり
  • WordPress の更新にプラグインが追従しなかった場合の対処方法まとめ
  • twentytwelve の functions.php の日本語化
  • Home

アーカイブ

最近の投稿

  • FuelPHP 1.6 翻訳ウィーク
  • casperjs を用いて Novius OS をインストールする
  • AGPL ライセンスについて
  • WordPress の更新にプラグインが追従しなかった場合の対処方法まとめ
  • Novius OS で A/B テスト
  • FuelPHP 勉強会 東海 vol.4 開催しました
  • 書評 「アメブロからWordPressへの移行方法」
  • Novius OS 言語/文字エンコーディング関連の問題
  • 言い値書店 アクセス解析と販売データ 2013年4月号
  • KDPノ全テを読んだ
  • 管理者紹介
  • オープンソースのメリットデメリット
  • wordbench
  • myplugin
  • Contact

Copyright © 2008-2013 Standing on the Shoulder of Linus. Powered by WordPress

ブログ、CMS構築はPHPでWEB作成