重複する要素を取り除く
Posted feedbacks - PHP
PHPは配列操作得意ですね。
1 2 3 4 5 6 7 8 9 10 11 12 | <?php
function only_unique($ary) {
foreach ( $ary as $val ) {
if ( count(array_keys($ary,$val)) == 1 ) {
$rtn[] = $val;
}
}
return $rtn;
}
print_r(only_unique(array(3, 1, 4, 1, 5, 9, 2, 6, 5)));
?>
|
array_count_valuesを使って。 やってみたところ配列の順序は保存される様ですが、 関数の仕様として保証されているものではなさそうなので 順序(というかキー)を保存するバージョンもセットで投稿します。 (…お題の要件として順序の保存は必要なかったのかな?) 配列の値で何度も検索するような場合は(状況が許せば)array_flipで キーと値を入れ換えちゃうと速い(気がする)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php
function oneces($a) {
$cs=array_count_values($a);
$r=array();
while(list($v,$c)=each($cs))
{ if($c==1)
$r[]=$v;
}
return $r;
}
//キーを保存するバージョン
function oneces2($a) {
$cs=array_count_values($a);
$a=array_flip($a);
while(list($v,$c)=each($cs))
{ if($c>1)
unset($a[$v]);
}
return array_flip($a);
}
print_r(oneces(array(3, 1, 4, 1, 5, 9, 2, 6, 5)));
print_r(oneces2(array(3, 1, 4, 1, 5, 9, 2, 6, 5)));
?>
|
シンプルに
1 2 3 4 5 6 7 | <?php
function only_unique($a){
return array_keys(array_count_values($a), 1);
}
print_r(only_unique(array(3, 1, 4, 1, 5, 9, 2, 6, 5)));
?>
|


にしお
#3412()
Rating1/1=1.00
これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。
[ reply ]