DEV

PHP - 集合に関する関数

PHPで集合に関する操作をしたいので、関連する関数を調べます。今cakePHPでプログラムしているのでcakePHPを使います。

参考:PHP Arrays as Stacks, Queues and Set(スタック・待ち行列・和集合)

Controller

public function test(){
$a = '1,2,3,4,5,6,7';
$a = split(',',$a);
$b = array(1,3,5,7,9,11,13);
$merge = array_merge($a,$b);
$set = array_unique($merge);
$diff = array_diff($a,$b);
$diff_assoc = array_diff_assoc($a,$b);
$intersect = array_intersect($a,$b);
$data = array(
'merge' => $merge,
'set' => $set,
'diff' => $diff,
'diff_assoc' => $diff_assoc,
'intersect' => $intersect
);
$this->set('data',$data);
}

View

<?php
echo 'merge: ';
foreach($data['merge'] as $a){
echo $a. ' , ';
}
echo '<br /><br />';
echo 'set: ';
foreach($data['set'] as $a){
echo $a. ' , ';
}
echo '<br /><br />';
echo 'diff: ';
foreach($data['diff'] as $a){
echo $a. ' , ';
}
echo '<br /><br />';
echo 'diff_assoc: ';
foreach($data['diff_assoc'] as $a){
echo $a. ' , ';
}
echo '<br /><br />';
echo 'intersect: ';
foreach($data['intersect'] as $a){
echo $a. ' , ';
}
echo '<br /><br />';
?>

結果

merge: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 3 , 5 , 7 , 9 , 11 , 13 ,
set: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 , 11 , 13 ,
diff: 2 , 4 , 6 ,
diff_assoc: 2 , 3 , 4 , 5 , 6 , 7 ,
intersect: 1 , 3 , 5 , 7 ,

まとめ

array_merge($a,$b)単純に配列$aの後ろに配列$bをつなげて出力する
array_unique($merge)配列の要素から重複を取り除いて出力する
array_diff($a,$b)配列$aにあって、配列$bにない要素のみ出力する
array_diff_assoc($a,$b)array_diffと基本的に同じだが、配列$aと配列$bを比較する際に、キーの一致も確認する。今回の場合、キーと値のペアが一致するのは、1のみである為、配列$aの1以外の数字が出力された。
array_intersect($a,$b)配列$aにも配列$bにもある要素のみ出力する。