PHP では、2 つの配列間で異なる要素を比較することは一般的なニーズです。例:
この記事では、配列の異なる要素を比較するいくつかの方法を紹介します。 PHPで。
方法 1: array_diff 関数を使用する
array_diff 関数は、配列の違いを比較する PHP の組み込み関数です。この関数の使用方法は次のとおりです:
array array_diff ( array $array1 , array $array2 [, array $... ] )
この関数は 2 つの配列パラメーターを受け入れ、2 番目の配列には現れない最初の配列の要素を含む新しい配列を返します。
たとえば、次のコードは 2 つの配列の差を比較します。
$arr1 = [1, 2, 3, 4, 5]; $arr2 = [4, 5, 6, 7, 8]; $diff = array_diff($arr1, $arr2); print_r($diff); // 输出 [1, 2, 3]
array_diff 関数は 2 つの配列の異なる要素を見つけることができますが、配列内に重複した要素がある場合、この関数は誤った結果が発生する可能性があります。
例:
$arr1 = [1, 2, 3, 3, 3, 4, 5]; $arr2 = [3, 4, 5, 5, 5, 6, 7]; $diff = array_diff($arr1, $arr2); print_r($diff); // 输出 [1, 2]
この例では、$diff 配列の結果は [1, 2, 3] になるはずですが、両方の $arr1 に複数の「3」があるためです。および $arr2 配列 ” と 5” であるため、array_diff 関数は違いを正しく比較できません。
方法 2: array_diff_assoc 関数を使用する
array_diff_assoc 関数も PHP の組み込み関数ですが、この関数は 2 つの配列のキーと値が等しいかどうかを比較します。
この関数の使用法は次のとおりです:
array array_diff_assoc ( array $array1 , array $array2 [, array $... ] )
2 つ以上の配列パラメータを受け入れ、最初の配列内の他の配列に存在しない要素、またはキーと値が含まれるすべての要素を返します。等しくありません。
例:
$arr1 = ["a" => 1, "b" => 2, "c" => 3]; $arr2 = ["a" => 1, "b" => 2, "c" => 4]; $diff = array_diff_assoc($arr1, $arr2); print_r($diff); // 输出 ["c" => 3]
この例では、$diff 配列の結果は ["c" => 3] になります。これは、$ の "c" キーに対応する値が存在するためです。 arr1 配列は 3 です。 $arr2 配列にそのようなキーがないか、値が 3 に等しくありません。
方法 3: カスタム関数を使用する
カスタム関数を使用して 2 つの配列の異なる要素を比較することは、多用途でカスタマイズ可能な方法です。
たとえば、次の関数は 2 つの配列内の異なる要素を比較します:
function array_diff_custom($arr1, $arr2) { $diff = []; foreach ($arr1 as $key => $value) { if (!in_array($value, $arr2)) { $keyInArr2 = array_search($value, $arr2); if ($keyInArr2 !== false) { unset($arr2[$keyInArr2]); } $diff[$key] = $value; } } foreach ($arr2 as $key => $value) { $diff[$key] = $value; } return $diff; }
この関数は次の関数を実装します:
例:
$arr1 = [1, 2, 3, 3, 3, 4, 5]; $arr2 = [3, 4, 5, 5, 5, 6, 7]; $diff = array_diff_custom($arr1, $arr2); print_r($diff); // 输出 [0 => 1, 1 => 2, 2 => 3, 5 => 4, 6 => 5, 7 => 6, 8 => 7]
カスタム関数はトラバーサルを使用するため、効率が低く、配列が大きい場合にはパフォーマンスの問題が発生する可能性があります。
結論
この記事では、PHP で配列の異なる要素を比較する 3 つの方法、array_diff 関数、array_diff_assoc 関数、カスタム関数を紹介します。それぞれに利点と欠点があります。適切な方法を選択するアプリケーションのシナリオと特定のニーズによって異なります。
以上がPHPで配列のさまざまな要素を比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。