PHPでは、 array_diff()およびarray_diff_assoc()は、配列を比較して異なる要素を返すために使用される関数です。同様の機能はありますが、詳細にはいくつかの違いがあります。この記事では、これら2つの機能の主な違いを調査し、それぞれの該当するシナリオを分析します。
array_diff()関数は、2つ以上の配列間の差を計算するために使用され、最初の配列に含まれるが他の配列には含まれていない配列を返します。 array_diff()は、配列の値のみを比較するが、キー名を比較しないことに注意する必要があります。
文法:
array_diff(array $array1, array $array2, array ...$arrays): array
$ array1 :他の配列と比較される最初の配列。
$ array2、... $ array :最初の配列と比較される他の配列。
サンプルコード:
<?php
$array1 = array("a" => "red", "b" => "green", "c" => "blue");
$array2 = array("a" => "red", "b" => "yellow");
$result = array_diff($array1, $array2);
print_r($result);
?>
出力:
Array
(
[b] => green
[c] => blue
)
この例では、 array_diff()は、 arrays $ array1と$ array2の値のみを比較し、 $ array2に表示されない$ array1の要素を返します。
array_diff_assoc()関数はarray_diff()に似ていますが、配列の値を比較するだけでなく、キー名も比較します。したがって、要素は、値とキー名が異なる場合にのみ異なると見なされます。
文法:
array_diff_assoc(array $array1, array $array2, array ...$arrays): array
$ array1 :他の配列と比較される最初の配列。
$ array2、... $ array :最初の配列と比較される他の配列。
サンプルコード:
<?php
$array1 = array("a" => "red", "b" => "green", "c" => "blue");
$array2 = array("a" => "red", "b" => "yellow");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
出力:
Array
(
[b] => green
[c] => blue
)
この例では、 array_diff_assoc()も$ array1の要素を返しますが、キー名とキー値を比較します。 $ array1と$ array2は、キー名とキー値(キー名Bの値が異なるなど)の組み合わせが異なるため、返された結果はarray_diff()の出力と一致しています。
特性 | array_diff() | array_diff_assoc() |
---|---|---|
比較要素 | 値のみを比較します | 値とキー名を比較します |
キー名は結果に影響しますか | 結果に影響しません | キー名も結果に影響します |
適用可能なシナリオ | 値の比較のみに注意してください | 値とキー名の比較に注意し、要素のキー名と値が正確に一致することを要求します |
array_diff()を使用したシナリオ:
キー名ではなく配列の値だけを気にする場合は、 array_diff()を使用できます。たとえば、これらの要素のキー名に関係なく、配列内のどの要素が別の配列にないかを見つけてください。
array_diff_assoc()を使用したシナリオ:
値を気にするだけでなく、キー名を考慮する必要がある場合は、 array_diff_assoc()を使用する必要があります。たとえば、2つの配列を関連するキー値と比較する場合、値とキー名が一貫していることを確認してください。
array_diff()とarray_diff_assoc()はどちらも非常に便利な配列比較関数です。それらの主な違いは、配列のキー名が考慮されるかどうかにあります。これら2つの機能を選択するときは、ニーズに応じてキー名を考慮する必要があるかどうかを決定する必要があります。
URLを使用するコードにドメイン名がある場合、そのドメイン名をM66.netに置き換えます。例えば:
$url = "https://www.example.com";
変更されたコードは次のとおりです。
$url = "https://m66.net";