• 締切済み

array_uniqueについて

imasyuの回答

  • imasyu
  • ベストアンサー率36% (19/52)
回答No.1

>しかもソートしたいです!! 逆にソートしたくないならば思いつきませんでした ちょっとかっこ悪いソースですが $test_array = array("america","japan","america","canada","japan","america"); //配列をソートする sort($test_array); $arr_tmp = null; for($i=0;$test_array[$i];$i++){    //一個前の要素と比較して違えは新しい配列に格納    if($test_array[$i]<>$arr_tmp){       $new_arr[] = $test_array[$i];    }    $arr_tmp = $test_array[$i]; //比較用 } //配列を元に戻す $test_array = $new_arr; こんなのでどうでしょうか?

関連するQ&A

  • uniqueの使い方について

    現在C++でSTLを用いてプログラムを書いておりますが、uniqueの使い方で質問があります。 1, 1, 1,2 , 1 という配列が合った場合、uniqueで重複を消した場合、 1, 2, 1 となります。 sortをしてからuniqueを使えば 1,2 となりますが、sortをせずに一気に重複変数を消すアルゴリズムはありますでしょうか? このようなアルゴリズムが必要なのは以下の通りです。 要素にa,bを持つ構造体A struct A{ int a; int b; }; で、まずaの値でソートし、次にbの値が重複しているものは消すプログラムを書いております。 例えば (a,b) = (2,2), (1,1) (3,1) の場合 (a,b)=(1,1) (2,2) としたいのですが、単純にuniqueを使うと連続した値しか重複判定をしないので、 (a,b)=(1,1) (2,2) (3,1) と(3,1)が残ってしまいます。 uniqueに変わる良い方法はありますでしょうか? 説明が下手で申し訳ございませんが、もしなにか良い方法がございましたらご教示お願いいたします。

  • 空の配列を削除して、詰めていく。

    データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $a = array(100,100,100,100,100)というような。 これを、array_uniqueで重複している値を削除したのですが、その際、print_rで見ると、 Array ( [4] => 100 ) と表示されました。つまり、キーが0ではなく、4となってしまっています。 array_uniqueで帰ってきた値が複数なら、さらにsortすることで0から始まる配列として並び替えられるのですが、1つしか帰ってこないとsortをしても、キーは変わらないようです。 この値を表示させるとき、countで配列の数を数え、さらにfor文でcountの数だけ回し、print $i;で表示させるようにしているのですが、上記のようにarray_uniqueで1つの値しか帰ってこないと、ページに値がきちんと表示できなくなってしまいます。 これを解決するために、空の要素を削除して、空白でない要素のキーを前に詰めてくれるような関数などを探しているのですが、何か方法などありますでしょうか? Array ( [4] => 100 ) が Array ( [0] => 100 )となるようにしたいのです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • array_multisortについて

    階層が深いのですが以下のような多次元配列があります。PHP5です。 $data['data'][0]['name'] = 'あああ'; $data['data'][0]['price0'] = '80'; $data['data'][1]['name'] = 'いいい'; $data['data'][1]['price0'] = '350'; $data['data'][2]['name'] = 'ううう'; $data['data'][2]['price0'] = '514'; これをprice0の値でソートしたく調べたところarray_multisortが使えそうで 以下のようにしてみましたがエラーになってしまいます。 array_multisort($price0, SORT_DESC, $data['data']); マニュアルを見たのですがよくわからずでどうすればうまくソートできるでしょうか?

    • 締切済み
    • PHP
  • array_push関数について

    array_push関数を使って配列に追加していくことはできるのですが、多次元配列に追加する方法がわかりません。 WEBマニュアルを見ても詳しく書かれておらず困っています。 array_push関数で多次元配列に追加していくことはできるのでしょうか? できるのであれば簡単な書式をご伝授ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • push(@array, {}); について

    いつもお世話になります。 いまperlのプログラムを読んでいるのですが、 push(@array, {});  という記述があり@arrayという配列の最後に値を追加しているというのはわかるのですが、どんな値なのか、つまり{}の意味がわかりません。スペースでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • array_combineがうまくいかないので、教

    array_combineがうまくいかないので、教えてください ■やりたいこと ・一方の配列をキー、もう一方の配列を値として、新たな配列を生成したい ■現状 $c = array_combine($a , $b);とやると、 Array c (   [1] => 2   [2] => 0   [3] => 0 ) となってしまいます ■元データ Array a (   [0] => 1   [1] => 2   [2] => 2   [3] => 1   [4] => 3   [5] => 1   [6] => 2   [7] => 2   [8] => 3   [9] => 1 ) Array b (   [0] => 0   [1] => 2   [2] => 0   [3] => 2   [4] => 2   [5] => 0   [6] => 2   [7] => 0   [8] => 0   [9] => 2 ) ■質問 ・元データから、下記結果を得るにはどうすればよいでしょうか? Array c (   [1] => 0   [2] => 2   [2] => 0   [1] => 2   [3] => 2   [1] => 0   [2] => 2   [2] => 0   [3] => 0   [1] => 2 ) ・また、array_combineだとなぜ望む結果が得られないのでしょうか? 重複しているから?

    • ベストアンサー
    • PHP
  • array_randの改善・配列からランダムにキーを取得

    配列からランダムに値を取得したい。関数array_randを用いると可能だが、同じ値を繰り返し取得してしまうことがある。この点を改善したい。方法をおしえてください。 (例) 配列 1,2,3,4,5,6,7,8,9 からarray_randでランダムに1つ選ぶ。 1回目、4が選ばれる。array_randの場合、2回目も4が選ばれてしまうことがある。これを4以外の8つの値から1つを選ぶように改善したい。これを繰り返す。最後は配列が空になるようにしたい。 状況 phpを実行する都度、配列は、別ファイルのデータを読み込んで使用している。実行するユーザーの識別が必要でしょうか?

    • 締切済み
    • PHP
  • 連想配列を array_multisort() でphp4、php5の違い

    いつもお世話になります。 連想配列をarray_multisort()でソートしようとしています。 php5のサーバでは思うように動作するのですが、 php4のサーバでは、ソートされません。 print_r($ary); Array ( [BuID] => 11 [BuName] => aaaa [yymmdd] => 080507 [DateDisp] => 08年05月07日(水) [DateType] => 1210086000 [TaikaiName] => AAAA [HRef] => [AnkName] => ) Array ( [BuID] => 12 [BuName] => bbbb [yymmdd] => 080822 [DateDisp] => 08年08月22日(金) [DateType] => 1219330800 [TaikaiName] => BBBBBBBB [HRef] => [AnkName] => ) ・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・ の様な連想配列をyymmddでソートしようとしています。 php5.2.6だと、 foreach($ary as $key => $row){ $yymmdd[$key] = $row['yymmdd']; } array_multisort($yymmdd,SORT_DESC,$ary); で、$aryにyymmddで並び替えられた配列が入ります。 しかし、php4.2.2では、ソートされず、もとの配列がそのまま$aryに入ってしまいます。 array_multisort()は、phpのバージョンによって動作が異なるような記載もありません。 どなたかわかる方見えましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Array 関数について

    以前、成分解析プログラムで質問したものです。 あれからどうにかこうにかなっていますが、 どうしてもわからないものがあります。 それはArray関数です。 VBSでは「配列が格納されたバリアント型 (Variant) の値を返します。」とありますが、 それに相当する関数の類はVB.NETではいまいちわかりません。 どういう関数を使えばよいのでしょうか?

  • phpで配列の時 $names = array(

    phpで配列の時 $names = array('john','kate','bob') ; この右側のarrayは関数ですか?

    • ベストアンサー
    • PHP