多次元配列を2次元の連想配列で表現する方法
- PHP初心者ですが、多次元配列を2次元の連想配列で表現したいです。
- 試みとしてparent_idを入れた配列を作り、階層が深くなると前の要素のIDを配列に入れ、浅くなると配列の末尾の要素を削除する方法を試していますが、うまくいきません。
- 良い方法があれば教えていただきたいです。
- ベストアンサー
多次元配列を2次元の連想配列で表したい
PHP初心者です。 $category = array( array( 'ライフ' ), array( 'デジタルライフ', array( '携帯・PHS' ), array( 'ワンセグ放送' ) ), array( '趣味', array( 'AV機器', array( 'オーディオ' ), ), ), ); このような多次元配列を $new_category = array( array( 'id'=> '1', 'parent_id' => '-', 'name' => 'ライフ', ), array( 'id'=> '2', 'parent_id' =>'-', 'name' => 'デジタルライフ', ), array( 'id'=> '3', 'parent_id' => '2', 'name' => '携帯・PHS', ), array( 'id'=> 4, 'parent_id' => '2', 'name' => 'ワンセグ放送', ), array( 'id'=> 5, 'parent_id' => '-', 'name' => '趣味', ), array( 'id'=> '6', 'parent_id' => '5', 'name' => 'AV機器', ), ); このような二次元配列に変換したいです。 parent_idを入れておく配列を作って、階層が深くなったら前の要素のIDを配列に入れ、浅くなったら配列の末尾の要素を消去する…みたいなことを考えてあれこれやってみたのですが、なかなかうまくいきません。 何か良い方法がありましたら、教えていただけるとありたがいです。 よろしくお願い致します。
- php_noob
- お礼率42% (15/35)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
自信なし。 http://ideone.com/26MC3
関連するQ&A
- 多次元配列の入れ替え
いつもお世話になります。 PHPで多次元配列の入れ替えについて悩んでおります。 以下のようなデフォルトの配列から、整形後の配列 へ変換したいのですが、どのように扱ってよいか 頭が回らず困っています。 2次元目のクラスが等しいもののidをキーとして、 名前を値としたいのですが。。。 どうぞ宜しくお願いします(>へ<) //デフォルトの配列 Array ( [0] => Array ( [id] => 1 [class] => A [name] => 佐藤 ) [1] => Array ( [id] => 2 [class] => A [name] => 山下 ) [2] => Array ( [id] => 3 [class] => B [name] => 田中 ) [3] => Array ( [id] => 4 [class] => B [name] => 高橋 ) ) //整形後の配列 Array ( [A] => Array ( [1] => 佐藤 [2] => 山下 ) [B] => Array ( [3] => 田中 [4] => 高橋 ) )
- ベストアンサー
- PHP
- 多次元配列を連想配列へ変換したい
以下のような多次元配列を、 Array ( [0] => Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) ) [1] => Array ( [0] => Array ( [id] => 9 [hoge_id] => 15 ) ) [2] => Array ( [0] => Array ( [id] => 18 [hoge_id] => 15 ) ) [3] => Array ( [0] => Array ( [id] => 22 [hoge_id] => 15 ) [1] => Array ( [id] => 22 [hoge_id] => 15 ) [2] => Array ( [id] => 22 [hoge_id] => 15 ) ) ) 下記のような連想配列へ変換したいです Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) [1] => Array ( [id] => 9 [hoge_id] => 15 ) [2] => Array ( [id] => 18 [hoge_id] => 15 ) [3] => Array ( [id] => 22 [hoge_id] => 15 ) [4] => Array ( [id] => 22 [hoge_id] => 15 ) [5] => Array ( [id] => 22 [hoge_id] => 15 ) )
- ベストアンサー
- PHP
- 共通項を持つ配列同士を結合させるには
共通項を持つ複数の配列同士を結合させたいのですが、どうしても思った結果にならずに困っています。よろしくご教示下さい。 例えると、「果物」「野菜」という親の配列、「バナナ」「リンゴ」「キャベツ」「トマト」という子の配列があり、結果を以下のように表示させたいと考えています。 <h2>果物</h2> <p>バナナ</p> <p>リンゴ</p> <h2>野菜</h2> <p>キャベツ</p> <p>トマト</p> それぞれの配列の内容は、以下の様になっています。 $category = //親の配列 array(3) { ["category_id"]=> string(1) "1" ["category_name"]=> string(6) "果物" ["parent_id"]=> string(1) "0" //親のid 親の場合は"0" } array(3) { ["category_id"]=> string(1) "2" ["category_name"]=> string(6) "野菜" ["parent_id"]=> string(1) "0" //親のid 親の場合は"0" } $item = //子の配列 array(3) { ["item _id"]=> string(1) "3" ["item _name"]=> string(9) "バナナ" ["parent_id"]=> string(1) "1" //親のid } array(3) { ["item _id"]=> string(1) "4" ["item _name"]=> string(9) "リンゴ" ["parent_id"]=> string(1) "1" //親のid } array(3) { ["item _id"]=> string(1) "5" ["item _name"]=> string(12) "キャベツ" ["parent_id"]=> string(1) "2" //親のid } array(3) { ["item _id"]=> string(1) "6" ["item _name"]=> string(9) "トマト" ["parent_id"]=> string(1) "2" //親のid } 色々と条件分岐させてみたのですが、理想の結果になりません。 できれば、多少解説を付けながらご教示頂けると幸いです。 よろしくお願いします。
- ベストアンサー
- PHP
- 多次元配列で特定キーが重複している箇所をランダムで
PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい ・id基準 ■元配列 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [2] => Array ( [id] => 5 [name] => "鈴木" [age] => 12 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ■取得したいランダム結果配列例1 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) ■取得したいランダム結果配列例2 Array ( [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ※1次元目のキーは元キーを維持していなくても構いません
- ベストアンサー
- PHP
- 二次元配列のソート PHP
タイトルのとおりソートを行ってくれる関数を探しております。 $buf[][]の二次元配列の変数を日付の降順に並べ替えたいのですが、そういった関数は用意されていますか? sort()、rsort()では不可能かと思います。 以下、二次元配列の値です。配列三番目の日付の降順で再格納したいです。 ( [0] => Array ( [0] => 1[1] => name1 [2] => 2006-08-18 ) [1] => Array ( [0] => 2 [1] => name2[2] => 2006-08-28 ) [2] => Array ( [0] => 3[1] => name3 [2] => 2006-08-18 ) [3] => Array ( [0] => 4 [1] => name4[2] => 2006-08-18 ) よろしくお願いいたします。
- ベストアンサー
- PHP
- 多次元配列のカウントのしかた
すみません、質問させてください。 $array1:1次元配列 $array2:2次元配列 1次元配列のカウント(要素数)をしるには count($array1) とすれば取得することができますが、 2次元配列のカウントを取得するにはどのように すればいいのでしょうか?そんな関数はありますか? $array2のデータの中身 $array[0][0] = 'a'; $array[0][1] = 'b'; $array[1][0] = 'c'; $array[1][1] = 'd'; $array[2][0] = 'e'; $array[2][1] = 'f'; この場合、3という値が欲しいのですが・・・ 宜しくお願い致します。
- ベストアンサー
- PHP
- foreachで多次元配列にしたくないのですが……
foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array ( [0] => 3 [1] => 9 ) ■処理 foreach ($hoge as $val){ $result[]= 関数($val); } ■期待している結果 Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) [1] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) ■実際の結果 Array ( [0] => Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) ) [1] => Array ( [0] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) )
- ベストアンサー
- PHP
- Smarty 三次元配列を使いたい
最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23 | aaaa | xxxx | | | |------| | | | yyyy | |-------------------| | 24 | bbbb | zzzz | |-------------------| | 25 | cccc | tttt | | | |------| | | | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。
- ベストアンサー
- PHP
- 多次元配列で、foreachを使って、key値を
多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。 $x = array(); $x[] = array( "id" => 1, "name" => "JavaScript", ); $x[] = array( "id" => 5, "name" => "PHP", ); $z = array(); foreach($x as $key => $value){ $z[$value["id"]] = $value; } print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、 $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array ( [id] => 1 [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?
- ベストアンサー
- PHP
- 2次元配列の値の受け渡しについて教えてください
お世話になります。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値を渡したいと考えています。 出来ればPOSTで2次元配列を送りたいと考えていますが、そもそもPOSTで2次元配列を送ることはできるのでしょうか? たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? どなたか教えて頂けないでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
お礼
回答ありがとうございました。 このような$currentの回し方は思いつきませんでした。 なるほどです。