PHPは、開発者にリッチアレイ操作機能を提供する一般的に使用されるプログラミング言語です。配列処理のプロセス中、 array_diff_assoc()は、最初の配列に存在するが2番目のアレイには存在しない2つの配列と戻り要素を比較するために使用できる非常に便利な関数です。この関数は、キーと値を比較するだけでなく、その種類も考慮します。
今日、私たちが探求しようとしている焦点は、 Array_diff_assoc()がケースに敏感である理由と、このケースの違いが結果にどのように影響するかです。
まず、 array_diff_assoc()関数の基本的な使用法をすばやく確認しましょう。この関数のプロトタイプは次のとおりです。
array_diff_assoc(array $array1, array $array2): array
この関数は、$ array1ではなく、すべての要素を含む配列を$ array1で返します。 array_diff_assoc()は、キーと値のタイプとコンテンツを考慮に入れることに注意する必要があります。
$array1 = array(
"a" => "apple",
"b" => "banana",
"c" => "cherry"
);
$array2 = array(
"a" => "apple",
"b" => "Banana",
"c" => "cherry"
);
$result = array_diff_assoc($array1, $array2);
print_r($result);
出力の結果は次のとおりです。
Array
(
[b] => banana
)
Array_diff_assoc()がケースに敏感である理由は、その比較方法です。関数内で、PHPは収束演算子( === )を使用して、2つの配列のキー価値ペアを比較します。合同演算子は、値の内容を比較するだけでなく、その種類と大文字と大文字のケースも比較します。
上記のコードの例では、次のように表示されます。
$ array1 ["b"]の値は「バナナ」です
$ array2 ["b"]の値は「バナナ」です
array_diff_assoc()は比較のために収束演算子を使用するため、PHPは「バナナ」と「バナナ」が異なる文字列と見なされます。
したがって、この例では、 array_diff_assoc()は、 array1の「バナナ」とarray2の「バナナ」が異なるため、違いとして返されると考えています。
array_diff_assoc()のケースに敏感な性質は、結果に大きな影響を与えます。ケースに敏感にしたくない場合は、比較のために他の方法を使用することを検討してください。たとえば、 array_map()関数を使用して、すべての値を小文字(または大文字)に変換してから比較できます。
$array1 = array(
"a" => "apple",
"b" => "banana",
"c" => "cherry"
);
$array2 = array(
"a" => "apple",
"b" => "Banana",
"c" => "cherry"
);
// すべての値を小文字に変換します
$array1 = array_map('strtolower', $array1);
$array2 = array_map('strtolower', $array2);
$result = array_diff_assoc($array1, $array2);
print_r($result);
このコードは、両方の配列の値を小文字に変換し、それらを比較します。出力は次のとおりです。
Array
(
[b] => banana
)
array_diff_assoc()は、一致する演算子を使用して配列のキーと値を比較するため、caseに敏感です。この問題を回避するために、 array_map()およびその他のメソッドを使用して、 array_diff_assoc()を呼び出す前に、arrayの値を均一なケースに変換して、場合の違いによって結果が影響を受けないようにします。
うまくいけば、この記事は、array_diff_assoc()の動作と、ケースの違いをどのように処理するかをよりよく理解するのに役立ちます。他に質問がある場合は、お気軽にお問い合わせください!