PHPのarray_udiff()
関数は、コールバック関数を使い、ある配列の要素のうち、他の複数の配列にない値の要素はどれかを調べ、キーと値の相関関係を維持したまま抽出する組み込み関数。
定義
配列型 array_udiff( 配列型 $array1, 配列型 $array2[, 配列型 $...], コールバック $data_compare_func );
パラメータ
- 配列型 $array1
他と比較する配列。
- 配列型 $array2
「配列型 $array1」と比較する配列。
- 配列型 $…
オプション。
「配列型 $array1」と比較する配列は、カンマ
,
で区切り、複数指定することができる。- コールバック $data_compare_func
比較に用いるユーザー定義関数を指定。
ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。
戻り値
「配列型 $array1」の要素のうち、「配列型 $array2」や「配列型 $…」にない値の要素を格納した配列。
構文
ある配列の要素のうち、比較対象の配列にない値の要素を抽出
配列 = array_udiff( 他と比較する配列, 比較対象配列, コールバック関数 );
「コールバック関数」を比較に使い、「他と比較する配列」の要素のうち、「比較対象配列」にない値の要素を抽出し、「配列」に格納。
ある配列の要素のうち、他の複数の配列にない値の要素を抽出
配列 = array_udiff( 他と比較する配列, 比較対象配列1, 比較対象配列2, 比較対象配列3, コールバック関数 );
「コールバック関数」を比較に使い、「他と比較する配列」の要素のうち、「比較対象配列1」「比較対象配列2」「比較対象配列3」にない値の要素を抽出し、「配列」に格納。
サンプル
ある配列の要素のうち、比較対象の配列にない値の要素を抽出
<pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array( "白", "黒", "赤", "青", "緑" );
$varArrayB = array( "白", "黒", "緑", "紫" );
print_r( array_udiff( $varArrayA, $varArrayB, "compare" ) );
?>
</pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array( "白", "黒", "赤", "青", "緑" );
$varArrayB = array( "白", "黒", "緑", "紫" );
print_r( array_udiff( $varArrayA, $varArrayB, "compare" ) );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[2] => 赤
[3] => 青
)
(
[2] => 赤
[3] => 青
)
ある配列の要素のうち、他の複数の配列にない値の要素を抽出
<pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array( "白", "黒", "赤", "青", "緑", "紫", "イエロー" );
$varArrayB = array( "白", "黒" );
$varArrayC = array( "青", "緑" );
$varArrayD = array( "シアン", "マゼンタ", "イエロー" );
print_r( array_udiff( $varArrayA, $varArrayB, $varArrayC, $varArrayD, "compare" ) );
?>
</pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array( "白", "黒", "赤", "青", "緑", "紫", "イエロー" );
$varArrayB = array( "白", "黒" );
$varArrayC = array( "青", "緑" );
$varArrayD = array( "シアン", "マゼンタ", "イエロー" );
print_r( array_udiff( $varArrayA, $varArrayB, $varArrayC, $varArrayD, "compare" ) );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[2] => 赤
[5] => 紫
)
(
[2] => 赤
[5] => 紫
)
ある連想配列の要素のうち、他の複数の連想配列にない値の要素を抽出
<pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
$varArrayB = array(
"siro" => "白",
"kuro" => "黒"
);
$varArrayC = array(
"midori" => "緑",
"murasaki" => "紫"
);
print_r( array_udiff( $varArrayA, $varArrayB, $varArrayC, "compare" ) );
?>
</pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArrayA = array(
"white" => "白",
"black" => "黒",
"red" => "赤",
"blue" => "青",
"green" => "緑"
);
$varArrayB = array(
"siro" => "白",
"kuro" => "黒"
);
$varArrayC = array(
"midori" => "緑",
"murasaki" => "紫"
);
print_r( array_udiff( $varArrayA, $varArrayB, $varArrayC, "compare" ) );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[red] => 赤
[blue] => 青
)
(
[red] => 赤
[blue] => 青
)