2011年12月25日日曜日

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

0 件のコメント:

コメントを投稿