質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2061閲覧

配列の数だけ関数を実行した場合の効率のよい処理の方法はありますか?

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/05/05 03:23

現在、phpで各国のあるデータを取得するために下記のような処理をしました。
*実際はAPIを利用していますが、その部分は省きます。

lang

1$country_list=array( 2"IN","ID","UZ","KZ","KH","KG","SG","LK","TH","TJ","TM","NP","PK","BD","BT","PH","BN","VN","MO","MY","MM","MY","MN","LA","CN","TW","KR","TW","HK","AG","GU","SP","SC","SB","PF","PW","FJ","MU","MV","RE","HW","IS","IE","AZ","AE","AL","MD","MA","04","JO","LV","LT","RO","LU","LB","RU","US","AR","EC","SV","BB","PR","BR","VE","BZ","PE","BO","HN","MX","VI","AU","NZ","PG","DZ","IR","UG","ET","ER","OM","GH","QA","GM","KW","KE","CG","ZR","ZM","DJ","ZW","SD","SZ","SN","TZ","TG","NG","NA","NG","BH","03","BI","BJ","BW","MG","MW","MZ","RW","LS","ZA"); 3$len=count($country_list); 4 5$max=5; 6 7testfunc(0); 8 9function testfunc($cc){ 10global $len; 11global $max; 12global $country_list; 13 14 echo "国名:".$country_list[$cc]."<br>"; 15 16 if($cc==$len){ 17 echo "finish"; 18 exit(); 19 }else{ 20 21 for($i=0; $i<=$max; $i++){ 22 echo "for文:".$i."回目<br>"; 23 } 24 } 25 26 27 $cc++; 28 testfunc($cc); 29}

実際の各国のデータはfor文の部分ですが、今回はすっきりさせるために最大値なども$maxで処理しています。

上記の関数を見ていただくと分かりますが、関数内で関数を呼んでいる再帰関数で、さらにその関数内でfor文を呼び出しているので、上記の処理だとすんなりいけますが実際にはもっと多いデータ数になりCSVに保存する処理も追加しているせいか、$country_listが107ほどあると思いますが、その半分ほどで処理が止まってしまいます。
処理が重すぎたせいかもしれませんが、このような同じ関数をなんども呼び出す方法、しかもその中でfor文などで大量に処理する際の効率のよい書き方などありますでしょうか?

言葉足らずだと思いますがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2015/05/05 03:43

「実際の各国のデータはfor文の部分ですが」:どういうことですか?$country_list[$cc]を使って何かするということですか?
退会済みユーザー

退会済みユーザー

2015/05/05 04:07

説明へたで申し訳ありません。 for文の部分の処理ですが実際の流れは、 1: $country_list[$cc]から国の名前を取得(IDの場合はインド、UZはウズベキスタン) 2: 国名を利用してAPIで提供されているURLに問い合わせてデータをXMLもしくはjsonデータで取得 3: 予め用意してあるCSVファイルを読み込む。 4: そのデータをfor文でCSV用にデータを作成。 5: CSV書き込み保存 という処理をしています。 ただ全部載せると長くなりすぎて帰って複雑になると思ったので省略しました。
guest

回答1

0

ベストアンサー

Fatal error: Maximum function nesting level of '100' reached, aborting!

でしょうかね?

こちらではいかがですか?

<?php $country_list=array( "IN","ID","UZ","KZ","KH","KG","SG","LK","TH","TJ","TM","NP","PK","BD","BT","PH","BN","VN","MO","MY","MM","MY","MN","LA","CN","TW","KR","TW","HK","AG","GU","SP","SC","SB","PF","PW","FJ","MU","MV","RE","HW","IS","IE","AZ","AE","AL","MD","MA","04","JO","LV","LT","RO","LU","LB","RU","US","AR","EC","SV","BB","PR","BR","VE","BZ","PE","BO","HN","MX","VI","AU","NZ","PG","DZ","IR","UG","ET","ER","OM","GH","QA","GM","KW","KE","CG","ZR","ZM","DJ","ZW","SD","SZ","SN","TZ","TG","NG","NA","NG","BH","03","BI","BJ","BW","MG","MW","MZ","RW","LS","ZA"); $max=5; $cc = 0; foreach($country_list as $country) { testfunc($cc++); //$countryは利用していないが、普通のプログラムなら大抵何かに利用できるのでforeach文にしたが、for文でも別に構わない。 } function testfunc($cc){ global $max; global $country_list; echo "国名:".$country_list[$cc]."<br>"; for($i=0; $i<=$max; $i++){ echo "for文:".$i."回目<br>"; } }

なぜ再帰しているのか、意図が良くわかりません。

投稿2015/05/05 03:57

編集2015/05/05 04:09
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/05/05 04:18

何がしたいのかよくわからない上に、よくわからない-評価+評価が合ったりして、これがteratailなのかとおもったり…
退会済みユーザー

退会済みユーザー

2015/05/05 04:36

すいません。投稿するときに整理するべきでした。 急ぎで投稿してしまいました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問