多次元配列を2次元の連想配列で表現する方法

このQ&Aのポイント
  • 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
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

自信なし。 http://ideone.com/26MC3

php_noob
質問者

お礼

回答ありがとうございました。 このような$currentの回し方は思いつきませんでした。 なるほどです。

関連する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