現在の位置: ホーム> 最新記事一覧> array_diff_uassoc()のコールバック関数は、匿名関数バージョンのアンダーポートエラーをサポートしていません

array_diff_uassoc()のコールバック関数は、匿名関数バージョンのアンダーポートエラーをサポートしていません

M66 2025-06-06

PHPでは、 array_diff_uassoc()関数を使用して2つ以上の配列を比較し、他の配列ではなく最初の配列に含まれる配列を返します。同時に、 array_diff_uassoc()を使用すると、カスタム比較関数を使用して配列のキー名を比較できます。

ただし、PHPの下部バージョンでarray_diff_uassoc()のコールバック関数として匿名関数を使用すると、エラーが発生する可能性があります。この問題を理解するには、まずいくつかの重要な背景知識を理解する必要があります。

array_diff_uassoc()の使用

array_diff_uassoc()の関数署名は次のとおりです。

 array_diff_uassoc(array $array1, array $array2, callable $key_compare_func) : array

で:

  • $ array1は最初の配列であり、 $ array2は比較される他の配列です。

  • $ key_compare_funcは、キーを配列と比較するカスタム比較関数です。

問題のルート

PHPの低いバージョンでは、匿名関数(つまり、閉鎖)は、特定の組み込み関数、特にarray_diff_uassoc()のような関数へのコールバックとしてのパスを完全にサポートしていません。 Array_diff_uassoc()のドキュメントを介して、その3番目のパラメーター$ key_compare_funcが呼ばれる機能である必要があることを確認できます。 PHPはPHP 5.3以降の匿名関数をサポートしていますが、PHPのいくつかの低いバージョンでは、匿名関数はコールバック関数として十分にサポートされていないため、エラーが発生します。

質問の例

PHPの以前のバージョン(PHP 5.3以前など)では、次のコードがエラーを報告します。

 <?php
$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];

$result = array_diff_uassoc($array1, $array2, function($a, $b) {
    return $a - $b;
});
?>

このコードの目的は、匿名関数を介して配列の重要な値を比較することです。ただし、PHP 5.3以下のバージョンでは、PHPが匿名関数を正しく解析できず、コールバック関数として渡すことができないため、そのようなコードはエラーを報告します。

解決

1。名前付き関数を使用します

この問題を解決するために、匿名関数を名前付き関数に置き換えることができます。名前付き関数は、PHPのすべてのバージョンで正しく処理できます。

 <?php
function compare_keys($a, $b) {
    return $a - $b;
}

$array1 = [1 => 'apple', 2 => 'banana', 3 => 'cherry'];
$array2 = [1 => 'apple', 2 => 'orange', 4 => 'grape'];

$result = array_diff_uassoc($array1, $array2, 'compare_keys');
?>

この方法は、PHPのすべてのバージョンで適切に機能し、匿名関数によって引き起こされる可能な問題を回避します。

2. PHPバージョンをアップグレードします

可能であれば、PHPを5.3以上にアップグレードすることをお勧めします。 PHP 5.3以降では、匿名関数(閉鎖)がコールバック関数としてよりよくサポートされています。したがって、プロジェクトが古いPHPバージョンを使用している場合は、同様の互換性の問題を回避するためにPHPバージョンをアップグレードすることをお勧めします。

要約します

PHPでarray_diff_uassoc()を使用する場合、コールバック関数が匿名関数の場合、PHPの低いバージョンはエラーを報告します。問題の根本は、特にPHP 5.3より前のバージョンでは、匿名関数のサポートが制限されていることです。解決策は、匿名関数の代わりに名前付き関数を使用するか、PHPバージョンをアップグレードして匿名関数をサポートすることです。