配列配列関数(共通項・差分)
- array_diff〔配列の差分を求める〕
- array_diff_assoc〔添字の確認を含めて配列の差分を求める〕
- array_diff_key
〔キーを基準にした配列の差分を求める〕
- array_diff_uassoc
〔ユーザーが指定したコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める〕
- array_diff_ukey
〔ユーザーが指定したコールバック関数を用いて、キーを基準にした配列の差分を求める〕
- array_intersect〔配列の共通項を求める〕
- array_intersect_assoc〔添字の確認を含めて配列の共通項を求める〕
- array_intersect_key
〔キーを基準にして配列の共通項を求める〕
- array_intersect_uassoc
〔追加された添字の確認も含め、コールバック関数を用いて配列の共通項を確認する〕
- array_intersect_ukey
〔ユーザーが指定したコールバック関数を用いて、キーを基準にした配列の共通項を求める〕
- array_udiff
〔データの比較にコールバック関数を用いて、配列の差分を求める〕
- array_udiff_assoc
〔データの比較にコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める〕
- array_udiff_uassoc
〔データと添字の比較にコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める〕
- array_uintersect
〔データの比較にコールバック関数を用いて、配列の共通項を求める〕
- array_uintersect_assoc
〔データの比較にコールバック関数を用いて、追加された添字の確認も含めて配列の共通項を求める〕
- array_uintersect_uassoc
〔データと添字の比較にコールバック関数を用いて、追加された添字の確認も含めて配列の共通項を求める〕
array_diff
配列の差分を求める
unknown
他の引数のいずれにも存在しない比較配列1の値を全て有する配列を返します。 キーと値の関係は維持されます。
<?
$fruit = array("apple","banana","grape","remon");
$juice = array("apple","orange","grape");
//配列juiceに存在しない、配列fruitの値を返す
$diff = array_diff($fruit, $juice);
//差分
while(list($key, $val) = each($diff)){
echo $val . "\t";
}
//banana remon
?>
array_diff_assoc
添字の確認を含めて配列の差分を求める
unknown
比較配列1から、他の引数の配列の中に無い全ての値を含む配列を返します。 array_diff()関数と異なり、キーが比較に使用されます。
<?
$ary1 = array("1"=>"apple","2"=>"banana","3"=>"grape");
$ary2 = array("a"=>"apple","b"=>"banana","orange");
$unique = array_diff_assoc($ary1, $ary2);
print_r($unique); //Array ( [1] => apple [2] => banana [3] => grape )
?>
array_diff_key 
キーを基準にした配列の差分を求める
unknown
比較配列1から、他の引数の配列の中に無い全ての値を含む配列を返します。 キーと値の関係は維持されます。 array_diff()関数と異なり値ではなく、キーが比較に使用されます。
<?
if(!function_exists('array_diff_key')){
/* PHP v5.1.0未満 */
function array_diff_key() {
$argCount = func_num_args();
$diff_arg_prefix = 'diffArg';
$diff_arg_names = array();
for ($i=0; $i < $argCount; $i++) {
$diff_arg_names[$i] = 'diffArg'.$i;
$$diff_arg_names[$i] = array_keys((array)func_get_arg($i));
}
$diffArrString = '';
if (!empty($diff_arg_names)){
$diffArrString = '$'.implode(', $', $diff_arg_names);
}
eval("\$result = array_diff(".$diffArrString.");");
return $result;
}
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
// array(2) { ["red"]=> int(2) ["purple"]=> int(4) }
?>
array_diff_uassoc 
ユーザーが指定したコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める
unknown
比較配列1から、他の引数の配列の中に無い全ての値を含む配列を返します。 array_diff()関数と異なり、値ではなくキーが比較に使用されます。
比較は、ユーザーが指定したコールバック関数を使用して行われます。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、 それぞれ負の値、0、正の値を返す必要があります。
<?
if (function_exists('array_diff_uassoc')) {
function key_compare_func($a, $b) {
if ($a === $b) return 0;
return ($a > $b) ? 1 : -1;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
// Array([b] => brown [c] => blue [0] => red)
}
?>
array_diff_ukey 
ユーザーが指定したコールバック関数を用いて、キーを基準にした配列の差分を求める
unknown
比較配列1から他の引数の配列の中に無い全ての値を含む配列を返します。 キーと値の関係は維持されます。 array_diff()関数と異なり、値ではなくキーが比較に使用されます。
比較は、ユーザーが指定したコールバック関数を使用して行われます。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
if (function_exists('array_diff_ukey')) {
function key_compare_func($key1, $key2) {
if ($key1 == $key2) return 0;
else if ($key1 > $key2) return 1;
else return -1;
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
//array(2) { ["red"]=> int(2) ["purple"]=> int(4) }
}
?>
array_intersect
配列の共通項を求める
unknown
他の全ての引数に存在する比較配列1の全ての値を含む配列を返します。 キーと値の関係は維持されます。
<?
$ary1 = array("1"=>"apple","2"=>"banana","3"=>"grape");
$ary2 = array("a"=>"apple","b"=>"banana","c"=>"grape");
$unique = array_intersect($ary1, $ary2);
print_r($unique); //Array ( [1] => apple [2] => banana [3] => grape )
?>
array_intersect_assoc
添字の確認を含めて配列の共通項を求める
unknown
他の全ての引数に存在する比較配列1の全ての値を含む配列を返します。 array_intersect()関数と異なり、キーが比較に使われます。
<?
$ary1 = array("1"=>"apple","2"=>"banana","grape");
$ary2 = array("a"=>"apple","b"=>"banana","3"=>"grape");
$unique = array_intersect_assoc($ary1, $ary2);
print_r($unique); //Array ( [3] => grape )
?>
array_intersect_key 
キーを基準にして配列の共通項を求める
unknown
他の全ての引数に存在する比較配列1の全ての値を含む配列を返します。
<?
if (!function_exists('array_intersect_key')) {
function array_intersect_key ($isec, $arr2) {
$argc = func_num_args();
for ($i=1; $i < $argc; $i++) {
$arr = func_get_arg($i);
foreach ($isec as $k => $v) {
if (!isset($arr[$k])) unset($isec[$k]);
}
return $isec;
}
}
}
?>
<?
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_intersect_key($array1, $array2));
//array(2) { ["blue"]=> int(1) ["green"]=> int(3) }
?>
array_intersect_uassoc 
追加された添字の確認も含め、コールバック関数を用いて配列の共通項を確認する
unknown
他の全ての引数に存在する比較配列1の全ての値を含む配列を返します。 array_intersect()関数と異なり、キーが比較に使われます。
比較は、ユーザー指定のコールバック関数を使って行われます。 このコールバック関数は第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
if (function_exists('array_intersect_uassoc')) {
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
print_r(array_intersect_uassoc($array1, $array2, "strcasecmp"));
// Array([b] => brown)
}
?>
array_intersect_ukey 
ユーザーが指定したコールバック関数を用いて、キーを基準にした配列の共通項を求める
unknown
他の全ての引数に存在する比較配列1の全ての値を含む配列を返します。
比較は、ユーザー指定のコールバック関数を使って行われます。 このコールバック関数は第1引数が第2引数より小さい、等しい、大きい場合に、 それぞれ負の値、0、正の値を返す必要があります。
<?
if (function_exists('array_intersect_ukey')) {
function key_compare_func($key1, $key2) {
if ($key1 == $key2) return 0;
else if ($key1 > $key2) return 1;
else return -1;
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_intersect_ukey($array1, $array2, 'key_compare_func'));
//array(2) { ["blue"]=> int(1) ["green"]=> int(3) }
}
?>
array_udiff 
データの比較にコールバック関数を用いて、配列の差分を求める
unknown
比較配列1から他の比較配列の中に存在しない値を含む配列を返します。 キーと値の関係は維持されます。
データ比較には、ユーザー指定のデータ比較コールバック関数が用いられます。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
array_diff()関数と似ていますが、データ比較に内部関数を使用する点が異なります。
<?
class cr {
private $priv_member;
function cr($val){
$this->priv_member = $val;
}
#データ比較
function comp_func_cr($a, $b){
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);
/*
Array(
[0.5] => cr Object([priv_member:private] => 12),
[0] => cr Object([priv_member:private] => 23),
)
*/
?>
array_udiff_assoc 
データの比較にコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める
unknown
比較配列1から他の比較配列の中に存在しない値を含む配列を返します。 array_diff()関数やarray_udiff()関数と異なり、キーが比較に使用されます。
配列データの比較は、ユーザー指定のコールバック関数を用いて行われます(array_diff_assoc()関数とは反対の比較)。
このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
class cr {
private $priv_member;
function cr($val){
$this->priv_member = $val;
}
#データ比較
function comp_func_cr($a, $b){
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($result);
/*
Array(
[0.1] => cr Object ([priv_member:private] => 9),
[0.5] => cr Object([priv_member:private] => 12),
[0] => cr Object([priv_member:private] => 23)
)
*/
?>
array_udiff_uassoc 
データと添字の比較にコールバック関数を用いて、追加された添字の確認を含めて配列の差分を求める
unknown
比較配列1から他の比較配列の中に存在しない値を含む配列を返します。 array_diff()関数やarray_udiff()関数と異なり、キーが比較に使用されます。
配列データの比較は、ユーザー指定のデータ比較コールバック関数を用いて行われます(array_diff_assoc()関数とは反対の比較)。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、 それぞれ負の値、0、正の値を返す必要があります。
キーの比較は、ユーザー指定のキー比較コールバック関数を用いて行われます。 array_udiff_assoc()関数と異なり、キーの比較が内部関数で行われます。
<?
class cr {
private $priv_member;
function cr($val){
$this->priv_member = $val;
}
#データ比較
function comp_func_cr($a, $b){
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
#キー比較
function comp_func_key($a, $b){
if ($a === $b) return 0;
return ($a > $b)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
/*
Array(
[0.1] => cr Object([priv_member:private] => 9),
[0.5] => cr Object([priv_member:private] => 12),
[0] => cr Object([priv_member:private] => 23)
)
*/
?>
array_uintersect 
データの比較にコールバック関数を用いて、配列の共通項を求める
unknown
比較配列1から他の比較配列の中に存在する値を含む配列を返します。
配列データは、ユーザー指定のコールバック関数を用いて比較されます。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
print_r(array_uintersect($array1, $array2, "strcasecmp"));
//Array ( [a] => green, [b] => brown, [0] => red)
?>
array_uintersect_assoc 
データの比較にコールバック関数を用いて、追加された添字の確認も含めて配列の共通項を求める
unknown
比較配列1から他の比較配列の中に存在する値を含む配列を返します。 array_uintersect()関数と異なり、キーが比較に使用されます。
配列データはユーザー指定のデータ比較コールバック関数を用いて比較されます。 このコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result_array = array_intersect_assoc($array1, $array2);
//Array ( [a] => green )
?>
array_uintersect_uassoc 
データと添字の比較にコールバック関数を用いて、追加された添字の確認も含めて配列の共通項を求める
unknown
比較配列1から他の比較配列の中に存在する値を含む配列を返します。 array_uintersect()関数と異なり、キーが比較に使用されます。
配列データはとキーは、それぞれユーザー指定のデータ比較コールバック関数、キー比較コールバック関数を用いて比較されます。 これらのコールバック関数は、第1引数が第2引数より小さい、等しい、大きい場合に、それぞれ負の値、0、正の値を返す必要があります。
<?
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
print_r(array_uintersect_uassoc($array1, $array2, "strcasecmp", "strcasecmp"));
//Array ( [a] => green, [b] => brown )
?>