- ベストアンサー
配列で特定キーが同じ値だった場合のみ、特定キー連結
- 配列の特定キーが同じ値である場合、その特定キーと値をまとめたい場合があります。
- 例えば、idが同じ配列が複数ある場合、idごとにpreとpre_idをまとめたいとします。
- 修正を行うと、同じidがある場合にpreとpre_idをまとめることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんの意図している「まとめる」という作業はどういうものでしょうか [pre] => '東京','大阪' [pre_id] => 7,2 というのは文字列や整数値の表現としてあり得ません。その部分を補足してください。 もし、 [pre] => '東京,大阪' [pre_id] => '7,2' になっていいのなら下記のように書けるとは思います。 <?php $source = array(); $source[] = array('id'=>1, 'pre'=>'東京', 'pre_id'=>7, 'rank'=>'A'); $source[] = array('id'=>1, 'pre'=>'大阪', 'pre_id'=>2, 'rank'=>'A'); $source[] = array('id'=>4, 'pre'=>'名古屋', 'pre_id'=>3, 'rank'=>'B'); $target = array(); foreach ($source as $item) { $id = $item['id']; foreach ($target as $skey=>$out) { if ($out['id'] === $id) { $outkey = $skey; } } if (!isset($outkey)) { $target[] = $item; } else { $target[$outkey]['pre'] .= ',' . $item['pre']; $target[$outkey]['pre_id'] .= ',' . $item['pre_id']; unset($outkey); } } print '<pre>'; print_r($source); print_r($target); print '</pre>';
その他の回答 (2)
「まとめる」というのが、配列でまとめるのか、文字列のカンマ区切りでまとめるのか明示されていない。 「同じidがあったときだけ(3つ以上の可能性もあり)、[pre] [pre_id]をまとめたい」 → [rank] はどうなるの?
お礼
回答ありがとうございました。 >「まとめる」というのが、配列でまとめるのか、文字列のカンマ区切りでまとめるのか明示されていない ・文字列カンマ区切りの意味で質問しました ・ちなみに、配列でまとめることも可能なのでしょうか? >→ [rank] はどうなるの? ・同じidでないときは、そのままの表示を希望でした ・明記していなかったので、次回から気をつけますー
- muuming2001
- ベストアンサー率23% (202/847)
ひどいな。 わからないのではなく、考えも調べも何もせずに他人にソース書かせてるだけじゃないか。
お礼
回答ありがとうございました。 おかげでうまくいきましたー >もし、 >[pre] => '東京,大阪' >[pre_id] => '7,2' >になっていいのなら ・意向を汲み取っていただきありがとうございます ・これをやりたかったです