PHP

【PHP】2つの配列が全く同じであるかを比較する

(追記)

コメントでいただいた方法だと、簡単に判定が可能でした!


php なら直接比較で良い気がします。


$a = [0,1,2,3];

$b = [0,1,2,3];
var_export ($a === $b);
// true

・・・以降記載のような面倒な方法は回り道した記録として残しておきます。


array_diff を使います。

$array1 = [1,2,3];

$array2 = [1,2,3];
$diff = array_diff($array1, $array2);
# var_dump($diff); → []

array_diffは第一引数の配列と以降の引数の配列を比較して、存在しなかった要素を返却します。

ですので、上記例だと

\$array2に1があるか

\$array2に2があるか

\$array2に3があるか

という順番で判定するわけです。

つまり、

$array1 = [1,2,3];

$array2 = [1,2,3,4];
$diff = array_diff($array1, $array2);
# var_dump($diff); → []

上記の場合でも同じとなってしまうのです。

配列の要素数が同じであれば、array_diffで同じであるかどうかを判定できるので、

/**

* 同じ配列かチェックする
* @param array $array1
* @param array $array2
* @return bool $flag
*/

function checkSameArray(array $array1, array $array2): bool
{
$flag = false;
// 要素数を判定
if (count($array1) === count($array2)) {
// array_diff で判定
if (count(array_diff($array1, $array2)) === 0) {
$flag = true;
}
}
return $flag;
}

このように判定すると、配列がまったく同じものであるかどうか判定できます。

※わざわざ関数化しなくても、

if (count($array1) === count($array2) && count(array_diff($array1, $array2)) === 0) 

と判定すればいいので、コードの長さや使いまわしなどを考慮して実装するといいでしょう。