• ベストアンサー

phpでXML等のデータを取るとき、多次元配列の扱い方について

phpでRSS等のXMLファイルを、 XMLファイルを配列に変換するライブラリ等で配列に変換するとします。 XMLの入れ子の深いところにあるデータは $row['hoge']['1200']['hogehoge']['hoge-5']['data']等と (配列名は仮名) と、配列階層が深すぎてとても長くなってしまいます。 実際は、10以上の深い階層になることもありえます。 取得するデータが膨大になると、混乱してくるおそれもあるので これを何とか簡略したいのですが、 深い多次元配列を簡略的に把握する良い方法があれば アドバイスをお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

長い変数名を書くのが面倒くさいだけなら、 単に $hogehoge = $row['hoge']['1200']['hogehoge']; として、 print $row['hoge']['1200']['hogehoge']['hoge-5']['data'];の代わりに print $hogehoge['hoge-5']['data']; print $hogehoge['hoge-6']['data']; print $hogehoge['hoge-7']['data']; で、いいような、意図がちがいますか?

yuzuru0024
質問者

お礼

回答ありがとうございます。 長い配列変数をもっと短く書く方法を探していたので意図はあってます。 配列の配列なんだから、途中の配列名を頭にもってこればよかったんですね。

関連するQ&A

  • PHPで配列の検索方法

    PHPで下のような2次元配列があったとします。(りんご=a、みかん=bのような意味です。CSVからデータを2次元配列に格納したものです。) $data[0][0]="りんご" , $data[0][1]="a" $data[1][0]="みかん" , $data[1][1]="b" $data[2][0]="ばなな" , $data[2][1]="c" $data[3][0]="ぶどう" , $data[3][1]="d" ここで下のような1次元配列$hogeがあったとき $hoge[0]="ばなな" , $hoge[1]="りんご" 新たに1次元配列$hogehogeを用意して、2次元配列の中から"りんご"や"ばなな"に対応する文字列を探し出して $hogehoge[0]="c" , $hogehoge[1]="a" と、格納したいのですが、やり方がわかりません。 イメージとしまして、 $hoge[0]→($data[0][0]~$data[3][0]の中から探す)→($data[2][0]であるとわかる)→($data[2][0]に対応するのは$data[2][1]だとわかる)→($hogehoge[0]=cと格納) もし分かる方がおられましたらお願いします。

    • ベストアンサー
    • PHP
  • PHP ”XML_unserialize”でXMLを配列に変換したのですが・・・

    XMLファイルを配列としてとってこれる XML_unserializeというライブラリを使用して XMLファイルに含まれるデータをとってPHPで利用することが できたのですが、ここで一つ大きな問題が発生しました。 XML_unserializeをつかうと <XMLTAG>  取り出したいデータ </XMLTAG>      ↓ array(  [XMLTAG] = 取り出したいデータ ) と、たしかに取り出したいデータを配列に変換することができます。 しかし、取り出したいデータの中にタグが含まれていた場合 例えば <XMLTAG>  <div>取り出したいデータ</div> </XMLTAG> とかになっていると <div>もXMLと判断されてしまって 必要なデータがうまくとってこれないのです。 正規表現でエスケープさせるにしても数が膨大ですし、 XMLタグ名に実際にHTMLで使われている タグ名が使われているとも限りません。 どうすれば、 ”XMLの中に入っているHTML等のタグを含むデータ”をうまくとってくることが できるのでしょうか?

    • ベストアンサー
    • PHP
  • 2次元の配列にデータを格納したい

    hoge.txtの様なファイルがあって、この値を2次元の配列に格納したいのですが、簡単に実現することは可能でしょうか? open (FILE, "hoge.txt"); foreach (<FILE>) { # この中で、2次元の配列に格納したい } hoge.txt A  1 B  2 C  3

    • ベストアンサー
    • Perl
  • PHP二次元配列をJavaScript配列へ変換

    PHPの二次元配列データを、JavaScriptの二次元配列データとして使用したいのですが、どうやって変換すればよいでしょうか?

    • ベストアンサー
    • PHP
  • 多次元配列からxmlツリーを作成したい

    はじめて投稿させていただきます。 DBに登録されているツリーテーブルを配列に取り込み、 xmlのツリーにしてファイルに保存したいと考えております。 DBのデータは以下のようになっております。 id cid att name 0 -1 D a 1 0 F b 2 0 F c 中略 33 -1 D d 34 33 D e 35 34 F f 36 34 F g 中略 262 -1 D h 263 262 D i 264 263 F j id:インデックス cid:子番号(idに同じ番号を持つものを親とする)(-1は最上階層の親) att:DはディレクトリFは末端 name:表示する名前 これを展開しながらxmlタグを挿入していきたいのですが nameを出力するタイミングでタグを挿入しようとすると末端のものしか 開始・終了タグで挟むことができません。 入れ子になっている場合の親の終了タグは全ての子供が終わった後に、階層の深さの数だけを最後に足してやりたいのです。 不規則な配列なのでforeachでするくらいしかわからず、 やってみたのですがatt=="D"なら再帰処理で繰り返し、 Dでなくなったら末端を書くくらいの事しかできず、 終了タグをどういった処理で入れたらよいかわかりません。 800文字制限に引っかかってしまい実際の配列の形はのせれませんでした。。 分割投稿も禁止のようで。。 各要素を持つ末端配列はわかりやすいように、仮に一つであっても次元を一つ下げて0番目の配列に格納しております。 もしかしたら配列への格納方法もよくないのかもしれません。。 ・後々扱いやすいような配列への格納の仕方 ・配列を展開しながらのタグの挿入方法 をどなたか良い案がありましたら宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPで多次元配列を一度に処理するには

    例えば、 array(  [hoge1-1] => hoge1-1_value  [hoge1-2] => array(   [hoge2-1] => hoge2-1_value   [hoge2-2] => hoge2-2_value   [hoge2-3] => array(    [hoge3-1] => hoge3-1_value   )  ) ) のような多次元配列で、すべてのvalueに同じ処理を施すには foreachのなかにforeachを書いて処理するしかないのでしょうか。 もっと単純に、すべてのファイルを一度に処理できるようにする方法は ないでしょうか?

    • ベストアンサー
    • PHP
  • PHP4でのXMLデータの取り扱い

    Webサービスを利用してXMLデータを取得するスクリプトをPHPで書いています。レンタルサーバの関係でバージョンは4.4.4しか使えません。 XMLを扱う関数というと、PHP5ではsimpleXMLやXMLReaderなどがあるようで、各要素へアクセスするにも $xml=simplexml_load_file('books.xml'); foreach($xml->book as $book){ .... という感じでオブジェクトとしてアクセスできるようですが、こういうのをPHP4で実現する方法はないのでしょうか?例えば入れ子になったデータだと、深い階層にたどりつくために foreach($results as $key => $value){ foreach($value $key2 => $value2){ foreach($value $key3 => $value3){ ... } } } みたいな感じで書いているのですが、まったくスマートではないですし、なにか間違っているような気がします。良い方法があればお教えください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでXMLファイルを読み込みたい

    PHPを使ってxmlファイルを読み込んで、タグの中のデータなどを読み込んだりしたいです。 ですが、自作のxmlファイルだと simplexml_load_file()で読み込めません。xmlファイルの文字コードを色々と変えて試してみましたが、できませんでした。 ちなみに以下のコードは正常に動きました。Yahoo!のxmlファイルです。 $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); 出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」でした。 何度かやるうちにアルファベットは表示できても日本語が表示できないということもありました。 また、xmlファイルをphpのプログラムに作らせたいです。そのときに、simplexml_load_file()で読み込める日本語も含むxmlファイルをphpで作成するプログラムを教えていただけると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • 2次元配列について、教えてください。

    基本的なことなのでしょうがまだよくわかっていません。 ワークシートにたとえると、1次元は縦方向(行番号方向)、二次元は横方向(列番号方向)ですよね? 列数、行数にあたるのが1次元、二次元それぞれの添字ですよね? そしてセルに当たるのが「要素」ですよね? 以上の解釈があっていたら、 1.A列やB列にあたるものはなんと呼ぶのでしょうか? 2.1行目や2行目にあたるのはなんと呼びますか? 3.ワークシートで行や列を削除するような感じで2次元配列の行や列にあたるものを削除することはできますか? 4.UBound関数は、配列の大きさを調べられますが、この大きさは添字です。ワークシートのCells(65536,1).End(xlUp)Rowのように実際にデータがどこまで入っているか調べられますか? 教えてください。 前提とした解釈自体が違っていたらそれもご指摘ください。

  • JSON多次元オブジェクト(?)を配列へ変換したい

    ・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……

    • ベストアンサー
    • PHP