PHPのarray_diff()関数は、2つの配列を比較し、最初の配列にすべての要素を含む配列を返すために使用されますが、他の配列ではありません。この関数はシンプルに見えますが、それを使用すると、いくつかのデバッグ問題が発生する可能性があります。次に、 array_diff()関数の結果をデバッグする方法に飛び込み、違いを見つけて問題を解決します。
array_diff()関数の基本的な構文は次のとおりです。
array_diff(array $array1, array ...$arrays): array
$ array1は、ベンチマークアレイ、つまり他の配列と比較したいアレイです。
$ arrayは他の配列であり、比較する配列は複数の配列にすることができます。
たとえば、次の2つの配列があるとします。
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 3, 6];
array_diff()を使用して、 array1ではなくarray1で要素を見つけることができます。
$result = array_diff($array1, $array2);
print_r($result);
出力の結果は次のとおりです。
Array
(
[0] => 1
[3] => 4
[4] => 5
)
つまり、1、4、および5は、 array1には存在するが、 array2には存在する要素であることを意味します。
Array_diff()を使用しても期待を満たしていないときに返された結果が発生した場合、次の理由があるかもしれません。
array_diff()は要素の値に基づいて比較されますが、厳密な比較によって違いが見られます(つまり、両方のタイプと値は同じでなければなりません)。配列要素の種類が異なる場合、その値が同じであっても、比較が期待と一致しない可能性があります。
例えば:
$array1 = [1, 2, 3];
$array2 = ['1', '2', '3'];
$result = array_diff($array1, $array2);
print_r($result);
出力の結果は次のとおりです。
Array
(
[0] => 1
[1] => 2
[2] => 3
)
値は同じように見えますが、 array_diff()は、 array1の数値1、2、3は、 array2の文字列 '1'、 '2'、 '3'に等しくないことを考慮します。この問題を解決するために、最初に配列内の要素が一貫していることを確認するか、比較する前に要素を同じタイプに変換することができます。
array_diff()参照配列のキー名を保持します。キー名の違いを無視する必要がある場合は、 array_values()関数を使用して、配列を再インドすることができます。
$array1 = [1 => 1, 2 => 2, 3 => 3];
$array2 = [1 => 1, 2 => 2];
$result = array_diff(array_values($array1), array_values($array2));
print_r($result);
これにより、キー名が異なるための違いが回避されます。
デバッグ時に、最初に配列の内容を出力して、構造とデータが正しいことを確認できます。 print_r()またはvar_dump()関数を使用して、配列の詳細を表示できます。
print_r($array1);
print_r($array2);
他のタイプのデータではなく、配列を比較していることを確認してください。別のタイプの変数を誤って渡すと、 array_diff()が誤った結果を返します。 is_array()を使用して、変数タイプを確認できます。
if (!is_array($array1) || !is_array($array2)) {
echo "変数の1つは配列ではありません!";
}
アレイの違いをより直感的に理解したい場合は、2つの配列を手動でループして違いを出力できます。例えば:
foreach ($array1 as $key => $value) {
if (!in_array($value, $array2)) {
echo "存在する array1 の要素を見つけます $value, 但不存在する array2 真ん中。\n";
}
}
これは、それぞれの違いが何であるかを理解し、より良いデバッグに役立ちます。
プロジェクトに次のコードがあるとします。
$array1 = ['apple', 'banana', 'cherry'];
$array2 = ['apple', 'grape', 'banana'];
$result = array_diff($array1, $array2);
print_r($result);
出力の結果は次のとおりです。
Array
(
[2] => cherry
)
この例では、リターンはチェリーであり、他の潜在的な違いを確認することをお勧めします。より良いデバッグのために、2つの配列を印刷して、各要素が正しいことを確認できます。例えば:
print_r($array1);
print_r($array2);
このようにして、各要素の値をはっきりと見て、違いがタイプの不一致かその他の理由によるものかを確認できます。
array_diff()関数をデバッグするとき、重要なのは、特にタイプとキー名の観点から、その動作を理解することです。配列の構造とデータ型を慎重に調べ、各違いを手動でデバッグすることにより、問題を効果的に特定して解決できます。 Array_diff()によって返された結果がまだ予想されていない場合、Arrayのデータを再検討して、非表示のタイプの違いやその他の論理エラーがないことを確認する必要がある場合があります。