4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-06-06

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

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) 

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

4
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?