現在の位置: ホーム> 最新記事一覧> Array_diff()が予想した結果を返さないのはなぜですか?

Array_diff()が予想した結果を返さないのはなぜですか?

M66 2025-05-14

array_diff()は、phpの非常に実用的な配列関数です。その機能は、最初のアレイに存在するが、他の配列には存在しない配列に値を返すことです。その構文は単純に見えますが、実際に使用されているときに「結果が間違っているのはなぜですか?」この記事では、一般的なエラーの使用法とデバッグ手法を要約して、 array_diff()をより効率的に使用するのに役立ちます。

1。基本的な使用法のレビュー

$array1 = ["apple", "banana", "cherry"];
$array2 = ["banana", "cherry"];
$result = array_diff($array1, $array2);
print_r($result);

出力:

 Array
(
    [0] => apple
)

ご覧のとおり、 array_diff()は、キー名に関係なく値を比較し、 $ array1であるが$ array2ではない部分を返します。

2。一般的なエラーとトラップ

1.一貫性のないデータ型は、障害の一致につながります

$array1 = [1, 2, 3];
$array2 = ["2", "3"];
$result = array_diff($array1, $array2);
print_r($result);

予想出力:

 Array
(
    [0] => 1
)

実際の出力:

 Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

これは、 array_diff()非ストリック比較を使用しているためです( ===ではなく==に相当)。場合によっては、文字列や数字が互いを正常に変換せず、比較の障害をもたらします。

解決策:カスタム比較関数を使用してarray_udiff()を使用して、「厳密な比較」を実現できます。

 function strict_compare($a, $b) {
    return ($a === $b) ? 0 : 1;
}

$result = array_udiff($array1, $array2, 'strict_compare');
print_r($result);

2。配列に値が重複している場合の誤解

$array1 = ["apple", "banana", "apple"];
$array2 = ["banana"];
$result = array_diff($array1, $array2);
print_r($result);

出力:

 Array
(
    [0] => apple
    [2] => apple
)

注: array_diff()は重複排除ではなく、元の配列にすべての未確認の値と元のキー名を保持します。

3。連想配列のキー名の効果

$array1 = ["a" => "apple", "b" => "banana"];
$array2 = ["banana"];
$result = array_diff($array1, $array2);
print_r($result);

出力:

 Array
(
    [a] => apple
)

配列が連想配列である場合でも、 array_diff()は値のみを比較し、キーを比較しません。キー名は結果に保存されています。

3。デバッグスキルと提案

  1. 中間変数を印刷します

    var_dump($array1, $array2);
    

    渡す2つの配列には、予期しない文字列/数のミキシング、スペース、またはフォーマットの問題がないことを確認してください。

  2. json_encode()を使用してデータ構造を確認します

    echo json_encode($array1);
    

    値のタイプを迅速に確認するのに役立ちます。または、暗黙の文字(スペース、ラインブレークなど)があるかどうかを確認します。

  3. 関数をデバッグしてみてください array_udiff()を使用する場合は、ログまたはデバッグステートメントを追加して、比較関数の値の比較を表示することを忘れないでください。

4.実際のケース:URLフィルタリング障害の問題

シーン:

 $urls = [
    "https://m66.net/page1",
    "https://m66.net/page2",
    "https://m66.net/page3"
];

$visited = [
    "https://m66.net/page2",
    "https://m66.net/page3"
];

$unvisited = array_diff($urls, $visited);
print_r($unvisited);

URLの1つにトレーリングスペースまたは/ような小さな違いがある場合、それはまた、正しく比較できないことにつながります!

データをクリーニングして比較することをお勧めします。

 $urls = array_map('trim', $urls);
$visited = array_map('trim', $visited);
$unvisited = array_diff($urls, $visited);

V.結論

array_diff()は強力なツールですが、非厳格な比較と比較のみの値のみを使用するため、一貫性のないデータ型または形式の場合、簡単にエラーを作成できます。その根本的な行動を理解し、適切なデバッグスキルを組み合わせることによってのみ、本当にうまく使用できます。

この記事が、array_diff()を使用するときに遭遇する「結果が間違っている」という問題をトラブルシューティングして解決するのに役立つことを願っています。より複雑なシナリオや比較ニーズに遭遇した場合は、 Array_udiff()またはカスタムロジックを組み合わせて、より詳細な制御を実現することも検討することもできます。