20
18

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.

2つの配列を短いコードでスマートに比較する

Last updated at Posted at 2014-05-13

「2つの配列が同じものかどうかチェックするPHP関数」 にインスパイアされて作ってみました。多次元配列に対応しています。

同じ値を持つときに True を返す

ソートさせて配列全体を === で比較させます。素直に in_array 関数あたりを使うことも考えましたが個数を考慮することが出来ないので、やはりソートが一番手っ取り早いし分かりやすいという結論に達しました。

function is_same_array(array $a, array $b) {
    static $sort;
    if (!$sort) {
        $sort = function (array &$array) use (&$sort) {
            foreach ($array as &$value) {
                if (is_array($value)) {
                    $sort($value);
                }
            }
            sort($array);
        };
    }
    $sort($a);
    $sort($b);
    return $a === $b;
}

同じキーと値のペアを持つときに True を返す

ソートさせて配列全体を === で比較させます。sort 関数はキーを保存しないので、代わりに asort 関数または ksort 関数を選択します。キーの方が情報量が一般的に少ないと言えるので、ここでは後者を採用することにします。

function is_same_assoc(array $a, array $b) {
    static $sort;
    if (!$sort) {
        $sort = function (array &$array) use (&$sort) {
            foreach ($array as &$value) {
                if (is_array($value)) {
                    $sort($value);
                }
            }
            ksort($array);
        };
    }
    $sort($a);
    $sort($b);
    return $a === $b;
}

同じキーと値のペアを持ち順番も一致しているときに True を返す

配列全体を === で比較させます。関数作る必要ないですねw

function is_same_order_assoc(array $a, array $b) {
    return $a === $b;
}
20
18
0

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
20
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?