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にもある要素のみ出力する。 |