- ベストアンサー
配列生成される限り、ループしたい
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ループをさせたいのですが正しい方法を教えていただけないでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
PHPのバージョンは? XMLを処理するのであればPHP5でしょうか? であればarray_walk_recursive()あたりで再帰処理をすればよろしいかと。 http://www.php.net/manual/ja/function.array-walk-recursive.php
その他の回答 (1)
- tqp
- ベストアンサー率0% (0/3)
何をされたいのか、いまいち理解出来ないのですが… 最後に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の内容が全くイメージでもつかめないので、 感じだけでいい加減です。
お礼
ありがとうございました。
お礼
早速の回答ありがとうございます。 PHPは5です。
補足
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でループさせるようなことはできないでしょうか?