1)AとBに共通の人名だけ抜きだした配列を作る
2)AとBを合わせた配列を作るが、重複している要素は重複しないように一つだけにする
という操作をしたいのですが、これらを最もスマートに行うにはどんなコードを書けばよいでしょうか?
こんにちは。
PHPでは、
共通部分を配列にするarray_intersect()と、
重複要素を削除するarray_unique()という配列操作関数がありますので、
これを使って、
とすると短くかけると思います。
http://jp2.php.net/manual/ja/function.array-unique.php
http://jp2.php.net/manual/ja/function.array-intersect.php
サンプルソース(SHIFT-JIS)
<html><head><meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> </head> <body> <?php // テスト配列 $A = array( '一郎', '二郎', '三郎', '四郎', '五郎', '六郎', '七朗', '七朗' ,'中居', '十兵衛' ); $B = array( '一郎', '二郎', '三郎', '四郎', '五郎', '六郎', '七朗', '七朗' ,'安藤', '田中' ); /* 1)AとBに共通の人名だけ抜きだした配列を作る 2)AとBを合わせた配列を作るが、重複している要素は重複しないように一つだけにする */ // 共通の人名だけ抜き出した配列を作る // ただし、重複している要素は1つにする // 共通部分を取り出す $res = array_intersect($A, $B); // 重複する要素を取り除く $res = array_unique($res); echo "<pre>"; var_dump($res); echo "</pre>"; ?> </body></html>
こんにちは。
PHPでは、
共通部分を配列にするarray_intersect()と、
重複要素を削除するarray_unique()という配列操作関数がありますので、
これを使って、
とすると短くかけると思います。
http://jp2.php.net/manual/ja/function.array-unique.php
http://jp2.php.net/manual/ja/function.array-intersect.php
サンプルソース(SHIFT-JIS)
<html><head><meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> </head> <body> <?php // テスト配列 $A = array( '一郎', '二郎', '三郎', '四郎', '五郎', '六郎', '七朗', '七朗' ,'中居', '十兵衛' ); $B = array( '一郎', '二郎', '三郎', '四郎', '五郎', '六郎', '七朗', '七朗' ,'安藤', '田中' ); /* 1)AとBに共通の人名だけ抜きだした配列を作る 2)AとBを合わせた配列を作るが、重複している要素は重複しないように一つだけにする */ // 共通の人名だけ抜き出した配列を作る // ただし、重複している要素は1つにする // 共通部分を取り出す $res = array_intersect($A, $B); // 重複する要素を取り除く $res = array_unique($res); echo "<pre>"; var_dump($res); echo "</pre>"; ?> </body></html>
わ、そんなそのままの関数があったんですね!
ありがとうございますー
$a = array('太田','田中','長井','宮地','5番','6番','橋本','山中','秋葉','社長'); $b = array('社長', '山根','田中','青木','吉田','松本','大木','名倉','原田','堀内'); // $a と $b に共通した名前 $c = array_intersect($a, $b); print_r($c); // $a と $b を合わせた配列を作って、重複する要素を省く $d = array_unique(array_merge($a,$b)); print_r($d);
その後の用途などにも依存するかと思いますが、サイズが10個であれば、以下が一番簡単なのではないでしょうか?
$unique_mergeのキーが問題ならsortでも使ってください。
コードはサイズ5個でやってます。
$a = array("a", "b", "c", "d", "e");
$b = array("a", "c", "e", "f", "g");
$intersect = array_intersect($a, $b);
$unique_merge = array_unique(array_merge($a, $b));
print_r ($intersect);
print_r ($unique_merge);
また、マニュアルを見ると色々あるので、一度目を通しては?
わ、そんなそのままの関数があったんですね!
ありがとうございますー