• ベストアンサー

重複配列除外方法

こんにちは、 重複配列の判断方法をお聞きしたいのですが、 $outdata[1]['id'] = 1 $outdata[2]['id'] = 1 $outdata[3]['id'] = 2 $outdata[4]['id'] = 3 上記のような配列があり、これを $test[1]['id'] = 1 $test[2]['id'] = 2 $test[3]['id'] = 3 とidが重複したものを除外したいのですが どのようなロジックになるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

既に使ったidを覚えておく場所を用意して、そこにない場合に追加をするとうロジックで良いと思います。 例えばこんな感じ? function dedupe(&$in) { $used_ids = array(); $out = array(); foreach ($in as $val) { $id = $val['id']; if (!in_array($id, $used_ids)) { array_push($used_ids, $id); array_push($out, $val); } } return $out; } print_r(dedupe($outdata)); PHPの配列は順序付きのマップのような働きをするらしいのでin_arrayで十分効率が良いと予想します。 http://stackoverflow.com/questions/4730745/does-php-5-x-have-some-kind-of-hashset-or-set-class

その他の回答 (2)

noname#244856
noname#244856
回答No.3

キーが0からの扱いという前提で。 特にユーザー定義関数作らなくてもarray_uniqueで出来ちゃうんですよね~ サンプルコード: http://ideone.com/liJPUu マニュアル: http://www.php.net/manual/ja/function.array-unique.php http://www.php.net/manual/ja/function.array-values.php

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

1と2が重複なのになぜ4を消しているのでしょうか? $outdata[1]['id'] = 1 $outdata[3]['id'] = 2 $outdata[4]['id'] = 3 とかじゃないの? もしくは基本どおり、0からはじまる配列に整列しなおすべきでは? $outdata[0]['id'] = 1 $outdata[1]['id'] = 2 $outdata[2]['id'] = 3

関連するQ&A

専門家に質問してみよう