はじめに
- 配列から重複した値を削除するために array_unique を検証する
背景
- PHPのマニュアルでは、多次元配列での使用を想定したものではないとの記載があったため、特定の多次元配列を用意してテストコードで問題ないかどうかの検証を行う
- https://www.php.net/manual/ja/function.array-unique.php
- array_uniqueの第2引数sort_flagsに、SORT_REGULARを指定すれば上手くいくであろうという記述もあったためテストコードにより確認する
プロダクションコード
/**
* 重複する配列データを削除する
*
* @param array $itemList
* @return array
*/
public function arrayUnique($arrayList)
{
return array_unique($arrayList, SORT_REGULAR);
}
テストコード
/**
* 重複する配列データが削除されるどうか確認する
*
* @test
*/
public function 重複する配列データが削除されるどうか確認する()
{
$テスト配列重複除外結果 = $this->CI->arrayUnique($this->テスト配列重複データ());
// 結果配列が空でない
$this->assertNotEmpty($テスト配列重複除外結果);
// 結果配列の数が2である
$this->assertCount(2, $テスト配列重複除外結果);
// 結果配列の順番が一致しているかどうか確認
$this->assertEquals(22222, $テスト配列重複除外結果[0]['id']);
$this->assertEquals(11111, $テスト配列重複除外結果[1]['id']);
// 結果配列の型も含めて等しいかどうか
$this->assertSame($this->期待値配列データ(), $テスト配列重複除外結果);
}
/**
* @return array
*/
public function テスト配列重複データ()
{
return array(
array(
'id' => 22222,
'name' => 'テスト名前2',
'data' => 'テストデータ2',
'start_date' => '2019-06-17 12:00:00',
'end_date' => '0000-00-00 00:00:00'
),
array(
'id' => 11111,
'name' => 'テスト名前1',
'data' => 'テストデータ1',
'start_date' => '2019-06-11 12:00:00',
'end_date' => '0000-00-00 00:00:00'
),
array(
'id' => 22222,
'name' => 'テスト名前2',
'data' => 'テストデータ2',
'start_date' => '2019-06-17 12:00:00',
'end_date' => '0000-00-00 00:00:00'
),
array(
'id' => 11111,
'name' => 'テスト名前1',
'data' => 'テストデータ1',
'start_date' => '2019-06-11 12:00:00',
'end_date' => '0000-00-00 00:00:00'
)
);
}
/**
* @return array
*/
public function 期待値配列データ()
{
return array(
array(
'id' => 22222,
'name' => 'テスト名前2',
'data' => 'テストデータ2',
'start_date' => '2019-06-17 12:00:00',
'end_date' => '0000-00-00 00:00:00'
),
array(
'id' => 11111,
'name' => 'テスト名前1',
'data' => 'テストデータ1',
'start_date' => '2019-06-11 12:00:00',
'end_date' => '0000-00-00 00:00:00'
)
);
}
UT結果
上記パターンの配列では問題なく重複データが削除されました。
別の多次元配列パターンなど一度テストコードにより検証を行うと安心かと思います。