dポイントプレゼントキャンペーン実施中!

こんにちは、
重複配列の判断方法をお聞きしたいのですが、

$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が重複したものを除外したいのですが
どのようなロジックになるのでしょうか?

A 回答 (3件)

既に使った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- …
    • good
    • 0

キーが0からの扱いという前提で。



特にユーザー定義関数作らなくてもarray_uniqueで出来ちゃうんですよね~

サンプルコード:
http://ideone.com/liJPUu

マニュアル:
http://www.php.net/manual/ja/function.array-uniq …
http://www.php.net/manual/ja/function.array-valu …
    • good
    • 0

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!