ホームページ  >  記事  >  バックエンド開発  >  PHPでarray_udiff関数を使用して配列の差分を実行する方法(比較関数をカスタマイズできます)

PHPでarray_udiff関数を使用して配列の差分を実行する方法(比較関数をカスタマイズできます)

WBOY
WBOYオリジナル
2023-06-26 13:32:26817ブラウズ

PHP では、配列は非常に一般的に使用されるデータ型であり、配列の操作と処理にとっても非常に重要です。配列を処理する場合、多くの場合、複数の配列間の比較や差異の取得などの操作を実行する必要があります。

PHP には配列に関する関数が多数用意されていますが、その中でも array_udiff() 関数は配列の差分を扱う関数で、複数の配列を比較して差分配列を返すことができます。この記事では、array_udiff()関数の使い方と、配列の差分を行う比較関数のカスタマイズ方法を詳しく紹介します。

1. array_udiff() 関数の基本的な使い方

array_udiff() 関数の基本的な構文は次のとおりです:

array array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )

このうち、$array1、$array2 以降$.. パラメーターは比較される複数の配列であり、$value_compare_func はカスタム比較関数です。

この関数の戻り値は配列であり、$array1 配列内の他の配列とは異なる値を示します。

次は、array_udiff() 関数の使用方法を示す簡単な例です:

<?php
function compare($a, $b){
    if($a === $b){ //值相等
        return 0;
    }
    return ($a > $b) ? 1 : -1;
}

$array1 = array(1, 2, 3, 4, 5);
$array2 = array(5, 6, 7, 8, 9);

$result = array_udiff($array1, $array2, 'compare');
print_r($result);
?>

上記のコードは、1、2、3、および 4 を含む配列 $result を出力します。値 $array1 には存在しますが、$array2 には存在しません。この結果は想像したものと同じです。配列 $array1 と $array2 には同じ値 5 しかないため、差分セットは $array1 の 5 を除くすべての要素になるはずです。

2. カスタム比較関数の実装

array_udiff() 関数を使用する場合、2 つの要素が同じかどうかを比較するために使用される比較関数をカスタマイズする必要があります。

比較関数定義は次の条件を満たす必要があります:

  1. 関数の戻り値は整数値でなければなりません;
  2. 整数値2 つの要素を表します サイズ関係、特に:

    • $a が $b より大きい場合、関数は 1 などの正の整数 (0 より大きい数値) を返す必要があります。 ##$a が $b より小さい場合、関数は -1 などの負の整数 (0 未満の数値) を返す必要があります;
    • $a が $b と等しい場合、関数は 0 を返す必要があります。
  3. 比較関数は実際の状況に応じて記述できます。たとえば、次の関数を使用して 2 つの文字列の長さを比較できます:
function compare_length($a, $b){
    $len_a = strlen($a);
    $len_b = strlen($b);
    if($len_a === $len_b){ //值相等
        return 0;
    }
    return ($len_a > $len_b) ? 1 : -1;
}

上記のcompare_length()関数では、strlen()関数を使用して$aと$bの長さを取得し、2つの長さを比較して対応する値を返します。

もちろん、比較関数は要素の値だけに関係するものではなく、配列に含まれるオブジェクトの特定の属性など、他の属性に基づいて比較することもできます。実際の状況に応じて書く必要があります。

比較関数をカスタマイズした後、array_udiff() 関数を使用して配列の差分を実行できます。たとえば、次の 2 つの配列があります。

$array1 = array('hello', 'world', 'foo', 'bar');
$array2 = array('world', 'bar', 'php');

$array2 とは異なる $array1 内の要素を検索したい場合は、次のコードを使用できます。

function compare_in_array($a, $b){
    if(in_array($a, $b)){ //值在另一个数组中存在
        return 0;
    }
    return ($a > $b) ? 1 : -1;
}

$result = array_udiff($array1, $array2, 'compare_in_array');
print_r($result);

Because in比較関数compare_in_array()では、$aが$b配列に存在するかどうかが判定されるため、$array2と同じ値を持つ要素は配列差分セットから除外されます。

3. 結論

array_udiff() 関数は複数の配列を簡単に比較および差分することができ、比較関数をカスタマイズすることで、独自のニーズに基づいて要素の比較方法を定義できます。より柔軟に配列できます。

比較関数をカスタマイズする場合、戻り値が整数であるという要件を満たす必要があり、必要に応じて実際の比較ロジックを記述する必要があることに注意してください。

以上がPHPでarray_udiff関数を使用して配列の差分を実行する方法(比較関数をカスタマイズできます)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。