• ベストアンサー

配列生成される限り、ループしたい

function arrayxml (){ urlで取得したXMLから、配列を取得 return $hairetu; //戻り値は多次元配列 } $data = arrayxml(); $cnt = count($data); do { for ($i=0; $i < $cnt; $i++) { $data = arrayxml($data[$i][0]); } } while (count($data) > 0); //関数によって配列が作られる限り このスクリプトではループはうまくされません。 $data = arrayxml($data[$i][0]);を--->arrayxml($data[$i][0]);にすると $cnt分ループされますが、do~whileのループはなされません。 関数で配列が生成される限り、do~whileループをさせたいのですが正しい方法を教えていただけないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

PHPのバージョンは? XMLを処理するのであればPHP5でしょうか? であればarray_walk_recursive()あたりで再帰処理をすればよろしいかと。 http://www.php.net/manual/ja/function.array-walk-recursive.php

brosis
質問者

お礼

早速の回答ありがとうございます。 PHPは5です。

brosis
質問者

補足

array_walk_recursive()を使うと、 array_walk_recursive ($data,'arrayxml'); といったところでしょうか。これを行うと、arrayxmlの戻り値を再びarrayxmlにわたせなかったのですが。 これは for ($i=0; $i < $cnt; $i++) {   arrayxml($data[$i][0]); } と、同じ結果になってしまいました。 どうにか、$data = arrayxml($data[$i][0]); をwhileでループさせるようなことはできないでしょうか?

その他の回答 (1)

  • tqp
  • ベストアンサー率0% (0/3)
回答No.2

何をされたいのか、いまいち理解出来ないのですが… 最後にarrayxmlを実行されたとき (arrayxml($data[$cnt-1][0]))の戻り値が空なのが 原因だと思います。 ひょっとして、最後が空でも他が空で無い限りは、 空で無い物に対しては実行したい、と言うお話でしたら、 再帰を使用するのが正しいと思います。 function func1($data){ $hoge = arrayxml($data) for($i=0; $i=count($hoge); $i++){ func1($hoge[$i][0]) } } のような関数を作って 初めに func1だけ呼べばいい感じでしょうか arrayxmlの内容が全くイメージでもつかめないので、 感じだけでいい加減です。

brosis
質問者

お礼

ありがとうございました。

関連するQ&A