はじめに
PHPで配列を比較するとき、==
と ===
の違いを理解していないと意図しない結果を招くことがあります。特に型や順番をどう扱うかは、試験でも実務でも問われやすい重要ポイントです。
この記事では、具体的なソースコードを通して「配列の比較」の仕組みを整理していきます。
目次
サンプルコード
<?php
declare(strict_types=1); //PHP5でも実行するためコメントアウト
error_reporting(-1);
$arr1 = [
'key1' => 111,
'key22' => 222,
'key333' => 333,
];
$arr2 = [
'key333' => 333,
'key22' => 222,
'key1' => 111,
];
$arr3 = [
'key1' => '111',
'key22' => '222',
'key333' => '333',
];
$arr4 = $arr1;
var_dump($arr1 == $arr2, $arr1 === $arr2);
echo "<br>";
var_dump($arr1 == $arr3, $arr1 === $arr3);
echo "<br>";
var_dump($arr1 == $arr4, $arr1 === $arr4);
echo "<br>";
実行結果
bool(true) bool(false)
bool(true) bool(false)
bool(true) bool(true)
解説
$arr1 == $arr2, $arr1 === $arr2
==
は キーと値が一致していれば順番は無視 →true
===
は キー・値・型・順番すべて一致 → 順番が違うためfalse
👉 出力: true, false
$arr1 == $arr3, $arr1 === $arr3
==
は 型を自動変換して比較するため、111
と'111'
は同じとみなされる →true
===
は 型も厳密比較するため、数値と文字列は異なる →false
👉 出力: true, false
$arr1 == $arr4, $arr1 === $arr4
$arr4
は$arr1
をそのままコピーしたもの- すべての条件が完全一致するので
==
も===
もtrue
👉 出力: true, true
まとめ
==
は「キーと値が同じならOK」 → 順番や型の違いは無視===
は「完全一致」 → 順番も型も厳密に比較- 配列比較の落とし穴は 「順番」と「型」
試験や実務でバグを防ぐためには、**「値が同じか」だけでなく「型や順番まで同じか」**を意識することが大切です。