Standing on the Shoulder of Linus

Home / 2012 / 1月 / 25 / 連想配列をランダムに並べ替える

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

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 拡張を利用してコードカバレッジをチェックできるようです。

関連

Posted in php | Tagged テスト, 並べ替え, 単体テスト
← ページ毎のウィジェット表示非表示をfunctions.phpで制御する方法 NEWS テーマ日本語化ファイル →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 6年使ったイーモバイル(Y!mobile)を解約手続。店頭でSIM返却
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.