2 つの連想配列があるとします。
<?php
$array1 = array(
1 => 2,
2 => 1,
);
$array2 = array(
2 => 1,
1 => 2,
);
これらには同じ要素が含まれていますが、順序が異なります。次の場合にのみ true になる比較関数を書きたかったのです。
- 配列には同じキー => 値のペアがあります。
- ペアの順序は同じです。
だから、私は次のことを試しました:
1 試行
if ($array1 == $array2)
{
print "equal\n";
}
プリント: 等しい
2回トライ
print count(array_diff_assoc($array1, $array1));
プリント: 0
私のカスタム関数
次に、次の関数を作成しました。
function compare(&$array1, &$array2)
{
$n1 = count($array1);
$n2 = count($array2);
if ($n1 == $n2)
{
$keys1 = array_keys($array1);
$keys2 = array_keys($array2);
for ($i = 0; $i < $n1; ++$i)
{
if ($keys1[$i] == $keys2[$i])
{
if ($array1[$keys1[$i]] != $array2[$keys2[$i]])
{
return false;
}
}
else
{
return false;
}
}
return true;
}
else
{
return false;
}
}
これは正しく動作しますが、ネストされた配列の配列にこの厳密な比較を適用したい場合は!=
、この if の演算子のために機能しません。
if ($array1[$keys1[$i]] != $array2[$keys2[$i]])
{
return false;
}
これは、再帰関数を使用して、データの種類ごとに切り替えることで修正できます。しかし、この簡略化されたバージョンは私にとっては問題ありませんでした。
このタイプの比較の標準的な解決策はありますか?