array_udiff_uassoc()

PHPのarray_udiff_uassoc()関数は、コールバック関数を使い、ある配列の要素のうち、他の複数の配列にない要素はどれかを調べ、キーと値の相関関係を維持したまま抽出する組み込み関数。

配列要素が同じか比較する際、配列要素の値だけでなく、キーも含めて比較する。

値の比較も、キーの比較も、コールバック関数を使う。

定義

配列型 array_udiff_uassoc( 配列型 $array1, 配列型 $array2[, 配列型 $...], コールバック $data_compare_func, コールバック $key_compare_func );

パラメータ

配列型 $array1

他と比較する配列。

配列型 $array2

「配列型 $array1」と比較する配列。

配列型 $…

オプション。

「配列型 $array1」と比較する配列は、カンマ,で区切り、複数指定することができる。

コールバック $data_compare_func

配列要素の値の比較に用いるユーザー定義関数を指定。

ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。

コールバック $key_compare_func

配列要素のキーの比較に用いるユーザー定義関数を指定。

ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。

戻り値

「配列型 $array1」の要素のうち、「配列型 $array2」や「配列型 $…」にない要素を格納した配列。

構文

ある配列の要素のうち、比較対象の配列にない要素を抽出

配列 = array_udiff_uassoc( 他と比較する配列, 比較対象配列, 値用コールバック関数, キー用コールバック関数 );

値の比較には「値用コールバック関数」、キーの比較には「キー用コールバック関数」使い、「他と比較する配列」の要素のうち、「比較対象配列」にない要素を抽出し、「配列」に格納。

ある配列の要素のうち、他の複数の配列にない要素を抽出

配列 = array_udiff_uassoc( 他と比較する配列, 比較対象配列1, 比較対象配列2, 比較対象配列3, 値用コールバック関数, キー用コールバック関数 );

値の比較には「値用コールバック関数」、キーの比較には「キー用コールバック関数」使い、「他と比較する配列」の要素のうち、「比較対象配列1」「比較対象配列2」「比較対象配列3」にない要素を抽出し、「配列」に格納。

サンプル

下記の3点に注目。

  • 配列要素が同じか比較する際、配列要素の値だけでなく、キーも含めて比較している。
  • キーと値の相関関係を維持したままである。
  • 値の比較も、キーの比較も、コールバック関数を使っている。

ある配列の要素のうち、比較対象の配列にない要素を抽出

<pre>
<?php
function compare_data( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a > $b ) ? 1 : -1;
}
function compare_key( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array( "白", "黒", "赤", "青", "緑" );
$varArrayB = array( "白", "黒", "青", "紫", "緑" );
print_r( array_udiff_uassoc( $varArrayA, $varArrayB, "compare_data", "compare_key" ) );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [2] => 赤
    [3] => 青
)

ある連想配列の要素のうち、他の複数の連想配列にない要素を抽出

<pre>
<?php
function compare_data( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a > $b ) ? 1 : -1;
}
function compare_key( $a, $b ) {
    if ( $a == $b ) {
        return 0;
    }
    return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array(
    "white" => "白",
    "black" => "黒",
    "red" => "赤",
    "blue" => "青",
    "green" => "緑"
);
$varArrayB = array(
    "white" => "白",
    "kuro" => "黒"
);
$varArrayC = array(
    "aka" => "赤",
    "blue" => "青",
    "midori" => "緑",
    "yellow" => "黄"
);
print_r( array_udiff_uassoc( $varArrayA, $varArrayB, $varArrayC, "compare_data", "compare_key" ) );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [black] => 黒
    [red] => 赤
    [green] => 緑
)

スポンサード リンク

カテゴリー: PHP, コールバック, 組み込み関数, 調査, 配列 タグ: パーマリンク