2つある配列を1つの配列にまとめて1つとして扱いたいのですが1つにまとめる方法が分からず困っています。
イメージとしては2つある配列をfor文などでループして1つにまとめたいのですがやり方がわかりません。
質問文が拙いですがお力を貸していただけると嬉しいです。
よろしくお願いします。
下記の配列を1つのものとしたい
PHP
1$hogename[] = array('id'=>1,'name'=>'hogehoge','gender'=>'男性'); 2$hogename[] = array('id'=>2,'name'=>'hogehoge2','gender'=>'女性'); 3$hogename[] = array('id'=>3,'name'=>'hogehoge3','gender'=>'男性'); 4 5$itemlist[] = array('id'=>1,'iteminfo' => array('木の枝','皮の服','鉄の鎧')); 6$itemlist[] = array('id'=>2,'iteminfo' => array('鉄の枝','鉄の服','鉄鉄の鎧')); 7$itemlist[] = array('id'=>3,'iteminfo' => array('鋼の枝','鋼の服','鋼の鎧')); 8 9$i = 0; 10 11foreach ($hogename as $hogenamez) { 12 foreach ($itemlist as $itemlistz) { 13 if ($hogenamez['id'] == $itemlistz['id'] ) { 14 $list[$i] = array( 15 'nameinfo' => $hogenamez, 16 'iteminfo' => array( 17 $itemlistz['iteminfo'] 18 ) 19 ); 20 } 21 } 22 $i ++; 23 } 24
idが同じなのでhogehogeさんの持ち物として下記のような結果が得られるようにしたい
最終イメージとしては
array ( 'nameinfo' => array ( 'id' => '1', 'name' => 'hogehoge', 'gender' => '男性', ), 'iteminfo' => array ( 0 => '木の枝', 1 => '皮の服', 2 => '鉄の鎧' ), ), ) array ( 'nameinfo' => array ( 'id' => '2', 'name' => 'hogehoge2', 'gender' => '女性', ), 'iteminfo' => array ( 0 => '鉄の枝', 1 => '鉄の服', 2 => '鉄鉄の鎧' ), ), ) array ( 'nameinfo' => array ( 'id' => '3', 'name' => 'hogehoge3', 'gender' => '男性', ), 'iteminfo' => array ( 0 => '鋼の枝', 1 => '鋼の服', 2 => '鋼の鎧' ), ), )
2つある配列がどんな配列なのかどこにもないですし、やりたい結果だけ出されても誰もなんとも言えません。
また、分からないなりに試したことがあるはずなので、質問本文に追記してください
すみません。今追記させていただきました。
で、自身が書かれたコードの問題点は何でしょうか。
https://teratail.com/help/question-tips#questionTips3-4
文法エラーがあるとかそういうところからですか?
配列が提示の内容通りでidが1個しかないならループすら不要ですけど。
おそらく以前の質問でも指摘されてたかと思いますが、もう少し仕様をきちんと考えられたほうが良いです。
でないと、自身が得られたいアドバイスが得られないばかりか、回答者が好き勝手に解釈した大喜利が始まります。
すみません。初心者なので仕様と言われましてもこれが僕の精一杯の考えての質問なので・・・
今回は例としてidは1つですが2、3と増やしていきたいと考えています
仕様という単語で構えてしまうのも致し方ないかもしれませんが、
「どういう情報を元に何をしたいか」が仕様です。それは質問者しか握っていません。
提示された情報が本当に全てであれば回答した通りループ不要ですし、
「idが同じなので」というところから、2つの配列には複数のidがあってそれぞれマッチさせて配列を作る必要があるのかとか。
そもそも今回の配列はどこからどのように発生するものなのかとか。
それが「前提や背景を含めた仕様」です。
以前の質問でも「パターンをもっと出してほしい」という依頼を受けていたかと思います。
それと理屈は同じです。
>今回は例としてidは1つですが2、3と増やしていきたいと考えています
その「増えたときの考慮が必要かどうか」が現在の質問内容では分かりません。
ひとまず、「増えたときの考慮が必要であることが分かるように」質問内容を調整するのと、
「増えたときの配列」を作ってください。
(あとこのデータはどこからどのように来るものなのか。固定値なら学習目的?大目的は必要ですね)
細かいですが、全角数値と半角数値はイコールにはなりませんので、ご注意を。
エラーに悩んでいるわけではないのでしたらそのあたりは配慮してもらえると答えやすいです。
本当にそういうコードを組んでいるのか、転記ミスなのかはこちらは分かりませんので。
僕の以前の質問も色々ご指摘いただいていたので前の質問を知っている程でお話しさせていただきます。
僕なりにまずはこの前の質問を噛み砕いてまずは固定値で今回のような配列を作成してみようと思い自分で試行錯誤しましたが中々うまく実現できず今回またこちらに質問させていただきました。
増えた時のパターンの配列、出力結果の方も追記しましたのでよければ目を通していただけると幸いです。
ご指摘ありがうございます。数字の方は僕のミスなので書き換えさせていただきました。
私はたまたま以前の質問を見ていて傾向を分かったうえで話ができますが、
ほとんどの人は質問もあなた自身も初見というのはお忘れなく。。。
(回答者は確かに質問者の人となりを過去質問から得ようとしますが、深くまで見ているとは限りませんし、全く見ない人もいますし、私も記憶は無限ではないので、しばらく見てなかった場合に本来触ってはいけないような危ない人に触ってしまうこともあります)
genderも'' つけといてくださいね。このままだと未定義の定数エラーが出ます。
すみません。以後気をつけます。
genderの指摘ありがとうございます。修正しました。
ちなみに、結果イメージにそれぞれidがついてないですが、それはいいんですね?
データをどう使いたいためのこの結果か知らないですが(そこも仕様で決められてないといけないところ)
idが消えるとその後のデータの紐づけに苦労するのではないかと思っています。
結果イメージのnameinfoの方にはidが欲しいので追加させていただきました。
不足点が多く申し訳ありません。
回答1件
あなたの回答
tips
プレビュー