現在の位置: ホーム> 最新記事一覧> コールバック関数の返品値が整数でなければならない理由

コールバック関数の返品値が整数でなければならない理由

M66 2025-06-06

array_diff_uassocは、phpの配列比較関数です。通常、2つの配列のキーと値を比較するために使用されます。ユーザー定義のコールバック関数を使用して、配列要素のキーを比較します。 array_diff_assoc関数とは異なり、 array_diff_uassocを使用すると、ユーザーは比較ルールをカスタマイズできます。この記事では、 array_diff_uassocを使用するときにコールバック関数の返品値が整数でなければならない理由を検討し、関数の動作原理と使用法のシナリオを確認します。

array_diff_uassoc関数の紹介

array_diff_uassoc関数は、2つの配列のキー価値ペアを比較し、最初の配列にあるが他の配列にはないキー値ペアを返します。この関数はarray_diff_assocに似ていますが、 array_diff_uassocは、ユーザーがコールバック関数を指定してキーの比較方法を決定できる追加の関数を提供します。

関数プロトタイプ:

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
  • $ array1 :比較される最初の配列。

  • $ array2 :比較する2番目の配列。

  • $ key_compare_func :2つの配列のキーを比較するユーザー定義のコールバック関数。

コールバック関数返品値の要件

array_diff_uassocを使用する場合、コールバック関数によって返される値は整数でなければなりません。これは、 array_diff_uassocがコールバック関数を使用して2つの配列のキーを比較するため、キーを比較すると、コールバック関数を呼び出して各キーの順序を決定します。コールバック関数の返品値はキーの関係を決定し、PHPにはソートと違いの計算を実行するために明確な比較結果が必要です。

コールバック関数の返品値の定義:

  • リターン値は負の整数であり、最初のキーが2番目のキーよりも小さいことを示しています。

  • 戻り値はゼロであり、2つのキーが等しいことを示しています。

  • 返品値は正の整数であり、最初のキーが2番目のキーよりも大きいことを示しています。

この戻り値は、PHPで一般的に使用されるStRCMPまたはSTRCASECMP関数に似ており、2つの文字列の比較結果を表すために整数値を返します。

なぜ整数を返さなければならないのですか?

  1. 明確な比較ルール: PHPのarray_diff_uassoc関数は、2つのキーを比較する標準としてコールバック関数の返品値を必要とします。整数の返品値は、「小さい」、「等しい」、または「大きな」関係を正確に表すことができます。整数を返すと、PHPがキーをソートして比較できるため、2つの配列間の違いを正しく計算できます。

  2. PHP内のソートメカニズムと一致して、 PHP内部ソート関数( USORTUKSORTなど)は、2つの要素間のソート関係を表す整数値を返すコールバック関数が必要です。したがって、 array_diff_uassoc関数は、他のソート関連関数との一貫性と互換性を確保するために、同じ慣習も採用しています。

  3. 簡素化されたロジック: PHPは、コールバック関数が他のタイプのデータ(ブール値や文字列など)を返す場合、キーソートロジックを適切に処理できません。整数返品値はこのプロセスを簡素化し、PHP内部比較メカニズムがアレイの違いを効果的に処理できるようにします。

コードの例

Array_diff_uassocを使用する簡単な例を次に示します。

 <?php
// コールバック関数を定義します,2つのキーのサイズを比較するために使用されます
function compare_keys($key1, $key2) {
    return strcmp($key1, $key2);  // 使用 strcmp 整数の結果を返します
}

// 2つの配列を定義します
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 2, "d" => 4];

// 使用 array_diff_uassoc 関数は2つの配列を比較します
$result = array_diff_uassoc($array1, $array2, 'compare_keys');

// 出力結果
print_r($result);
?>

出力:

 Array
(
    [a] => 1
    [c] => 3
)

上記の例では、 STRCMP関数をコールバック関数として使用して、配列のキーを比較しました。 STRCMPは整数値を返すため、キー比較をスムーズに実行でき、 Array_diff_uassocはArrayの違いを正しく計算できます。

要約します

array_diff_uassocを使用する場合、phpは整数に基づいてキー間のサイズ関係を内部的に決定する必要があるため、アレイの違いを正しく計算する必要があるため、コールバック関数の返品値は整数でなければなりません。整数を返すことは、明確な比較結果を提供し、機能が適切に機能し、PHPの他のソートおよび比較機能と一致するようにします。