質問させて頂きます。
言語:PHP
$aaa = array(array('id'=>1), array('id'=>2));
$bbb = array(array('id'=>1, 'name'=>'taro'), array('id'=>3, 'name'=>'hanako'));
上記の2つの配列でidキーが同じものは一緒にしたうえで、結合したいと考えています。
言葉足らずで申し訳ありません。実際に下に記述した形にしたいと考えています。
<結合後>
array(
'0' => array('id'=>1, 'name'=>'taro'),
'1' => array('id'=>2),
'2' => array('id'=>3, 'name'=>'hanako')
)
方法として、
foreachで$aaaを回し、さらにそのループの中でforeachで$bbbを回し、互いのidキーが同じならば、といった方法を考えたのですが、これではデータの数が多くなった際に、ループ数が大変なことになると思うので、何か別の方法は無いかと思い質問させて頂きました。
上記の方法よりスマートな方法があれば、教えて頂けると幸いです。
また、質問の内容に不備な点がありましたら、ご指摘お願いします。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
$aaa と $bbb を id でソートして、頭から同一 id 同士でマージしていけばいいんでないかい?
……と思って書いてみたら意外と長くなってしまったorz
----------------------------------------------------------------------------------------------
$aaa = array(array('id'=>1), array('id'=>2));
$bbb = array(array('id'=>1, 'name'=>'taro'), array('id'=>3, 'name'=>'hanako'));
$ccc = array();
$ia = 0;
$ib = 0;
$ic = 0;
function comp($lhs, $rhs) {
if ($lhs['id'] < $rhs['id']) return -1;
if ($lhs['id'] > $rhs['id']) return 1;
return 0;
}
usort($aaa, 'comp');
usort($bbb, 'comp');
while ($ia < count($aaa) || $ib < count($bbb)) {
if ($ia == count($aaa)) {
$ccc[$ic] = $bbb[$ib];
$ib++;
} else if ($ib == count($bbb)) {
$ccc[$ic] = $aaa[$ia];
$ia++;
} else {
switch (comp($aaa[$ia], $bbb[$ib])) {
case -1:
$ccc[$ic] = $aaa[$ia];
$ia++;
break;
case 1:
$ccc[$ic] = $bbb[$ib];
$ib++;
break;
case 0:
$ccc[$ic] = array_merge($aaa[$ia], $bbb[$ib]);
$ia++;
$ib++;
break;
default:
break;
}
$ic++;
}
}
No.1
- 回答日時:
なんかあったような気がしますが、プログラム的にやるとこんな感じ?
ただし全ての要素にidが存在し必ず数値であることが前提
<?PHP
$aaa = array(array('id'=>1, 'name'=>'taro'), array('id'=>2));
$bbb = array(array('id'=>1,'age'=>14), array('id'=>3, 'name'=>'hanako'));
$ccc = array();
foreach($aaa as $array){
$id=$array["id"];
$ccc[$id]=$array;
}
foreach($bbb as $array){
$id=$array["id"];
if(in_array($id,array_keys($ccc))){
$ccc[$id]=array_merge($ccc[$id],$array);
}else{
$ccc[$id]=$array;
}
}
$ccc=array_merge($ccc,array());
print_r($ccc);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでPEAR::DBを使っているので...
-
index.phpって何ですか? 具体...
-
phpでcookieがうまく保存されない
-
PHPSpreadsheetを使って関数を...
-
PHPのセッション有効期限について
-
index.phpに入るには、どうすれ...
-
重複を防ぐ記述について教えて...
-
フォームで戻った際に入力済み...
-
アンドロイドスマホでのphp ech...
-
入力フォームの空白や改行を制...
-
PHP8を使うと、大量のWarningが...
-
PostgreSQLからCSV形式でエクス...
-
PHPで画像の渡しが上手く行きま...
-
reuterの記事をbeautiful.soup....
-
PHP一覧表示した項目にリンクを...
-
値の取り出し方について教えて...
-
PHPSpreadsheetによる書き出し...
-
連投防止
-
ここでの ②if($su_d<>"")の比較...
-
オススメのプログラミングスク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
なんでブラウザでPHPを動かすた...
-
PHP8を使うと、大量のWarningが...
-
ワードプレスサイト PHP8.0.25...
-
PHPSpreadsheetを使って関数を...
-
php 入力画面から確認表示画面...
-
PHPのエラーの解消法について教...
-
掲示板のセキュリティについて...
-
php 完了画面の送信メールのコ...
-
PHPのセッション有効期限について
-
掲示板を作成しておりアップロ...
-
PHPでCookieを使った訪問回数に...
-
PHPで画像の渡しが上手く行きま...
-
重複を防ぐ記述について教えて...
-
php 確認表示画面で値をSESSION...
-
ファイルアップロードに関して...
-
メールフォームのタイトルが文...
-
フォームで戻った際に入力済み...
-
PHPで訪問回数を表示するカウン...
-
アップロード画像数でCSSを分け...
おすすめ情報
>再帰って知らない人?
正直あまり深く理解出来ていません。
もし何か良い方法があるなら教えて頂けると幸いです!