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

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

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

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

Q&A

解決済

3回答

352閲覧

php 関数をfor文内で実行したい。

syosinnsyanopuh

総合スコア20

PHP

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

0グッド

0クリップ

投稿2019/01/15 14:14

編集2019/01/15 23:34

前提・実現したいこと

関数をfor文内で実行したい
下記のように、関数内の引数をループで回したいのですが、うまくいきません。
どなたかご教示お願いいたします。

発生している問題・エラーメッセージ

undefined

該当のソースコード

phpソースコード

1 function kansuu($mysqli,$a,$b){ 2 $sql = "SELECT COALESCE(SUM(`Flg`), 0) AS `countFlg` \n" 3 ." FROM `Flgtb` \n" 4 ." WHERE `a`={$a} \n" 5 ." AND `b`={$b} "; 6 if(!$res = $mysqli->query($sql)){ 7 return false; 8 } 9 $i = 0; 10 $data = array(); 11 while($row = $res->fetch_array()){ 12 $data[$i++] = array( 13 "countFlg" => $row[countFlg] 14 ); 15 } 16 return $data; 17 }

phpソースコード

1 for($i = 0 ; $i < count($data['sample']); $i++){ 2 $hoge= kansuu($mysqli,$data[$i]['sample'],$data[$i]['sample'2]); 3 if($hoge=== false){ 4 $response->message = "情報が取得できません。" ; 5 $mysqli->close(); 6 exit(); 7 } 8 } 9

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

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

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

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

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

guest

回答3

0

個別の指摘になりますが、
0. undefinedって何の結果?
0. sqlで直に値を突っ込んでいる。エスケープは必須。
それか、PDOを使った方が確実。
0. a={$a}AND b={$b} としているけど$aや$bが文字列できたらSQLエラーになりますよ。関数は「何がくるかは知らない」「どのような使い方をされるのが知らない」のが前提なので初期値を入れるなり、引数のチェックはするべきです(タイプヒンティングつけてもいいですが)
0. SQLに全角空白が入っている。このSQLは通りません
0. if(!$res = $mysqli->query($sql)){ここおかしい気がする。
if(!$mysqli->query($sql)){とするか、ifの中で受け取るのではなくifの前で$resに受け取って$resのみ評価すべきでは。
0. $data[$i]['sample'2]という記述はそもそも構文エラー。何をやりたいのか読み取るのが難しいし、$dataという連想配列がどのような内容になっているか分からないのでどう修正するのかのアドバイスは難しい。$data[0]["sample2"]ならttyp03さんの指摘通り。
いずれにしても確実なことは言えないのでvar_dump($data);の内容を提示してください
0. 突然出てきている$responseという変数は何ものか。
0. それも含めてどのようなプログラムの流れかを把握するのが難しい。具体的にどのような要件を満たすためのプログラムなのか説明と、全体が分かるコードの提示は必須

などなど、突っ込みどころが非常に多いです。
的確な回答を得るには情報不足過ぎるし、それ以外でもミスが大量にあります。

投稿2019/01/16 00:55

m.ts10806

総合スコア80765

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

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

0

・関数「kansuu」がどんな関数か記述した方がより回答を得られると思います。

・「$data[$i]['sample'2]」は記述ミスではないでしょうか。

投稿2019/01/15 16:55

happyhappy

総合スコア346

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

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

syosinnsyanopuh

2019/01/15 23:33

回答ありがとうございます。 関数「kansuu」を追加しました。 $data[$i]['sample'2]につきましては、連想配列をループさせたいのです。
happyhappy

2019/01/16 09:48

> 関数をfor文内で実行したい 上記が実現したいことであれば以下で実現できます。 <?php for ($i = 0; $i < 10; $i++) { kansu($i); } function kansu($hikisu) { echo($hikisu."<br>"); } ?>
guest

0

ベストアンサー

ループを$data[$i]で回すのなら、count関数に渡すのは$dataでは。
あと他の回答にもあるように['sample'2]も間違いですね。

php

1 for($i = 0 ; $i < count($data); $i++){ 2 $hoge= kansuu($mysqli,$data[$i]['sample'],$data[$i]['sample2']); 3 if($hoge=== false){ 4 $response->message = "情報が取得できません。" ; 5 $mysqli->close(); 6 exit(); 7 } 8 }

投稿2019/01/15 23:52

ttyp03

総合スコア16996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問