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

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

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

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

Q&A

解決済

2回答

1552閲覧

php ループ文の処理

amaguri

総合スコア227

PHP

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

0グッド

0クリップ

投稿2017/02/09 05:00

編集2017/02/09 05:54

ループ文の処理についてお伺いしたいのですが

$arraydata= array(4){ [0]=>array(2){ ['id']01 ['no']0100 } [1]=>array(2){ ['id']02 ['no']0200 } [2]=>array(2){ ['id']03 ['no']0300 } [3]=>array(2){ ['id']00 ['no']0000 } というデータがあり $fp= fopen(ファイル名."a"); foreach($arraydata as $data){ $id = $data['id']; switch(substr($data['no']),0,2)){ case "01": $result = "4123" break case "02": $result = "3123" break case "03": $result = "2123" break } $wret=fwrite($fp,"{$id}"."{$result}"."\n); }

という処理に
$data['no']が00の場合はスキップして
$idを空にして
次のforeachのループに戻る処理を実行する
という処理を追加する場合

foreach($arraydata as $data){ $id = $data['id']; switch(substr($data),0,2)){ case "01": $result = "4123" break case "02": $result = "3123" break case "03": $result = "2123" break //追加 case "00": $id = ""; break } }

今回の場合はbreakで処理を終了させforeachの処理に戻してあげれいいのでしょうか?

それとも
$idの処理が実行される前に
先に$data['no']が先頭が00になる場合にスキップするコードを記載して
$idに値が入らないようにするほうがスマートでしょうか?

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

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

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

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

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

coco_bauer

2017/02/09 05:26

$idは代入されるだけで、$idの値が利用される箇所が見当たりません。$idを使うようなコードを示して下さい。 使わないのなら、何もしないのがスマートだと思います。
guest

回答2

0

ベストアンサー

$arraydata=

[0]array['id']01['no']0100
[1]array['id']02['no']0200
[2]array['id']03['no']0300
[3]array['id']00['no']0000

の例示がおかしいので、他の人がみてもわかるような
配列の代入式にして再提示ください

sample

対比表を作っておいたほうが早いかもしれませんね

PHP

1$arraydata=[ 2 ['id'=>'01','no'=>'0100'], 3 ['id'=>'02','no'=>'0200'], 4 ['id'=>'03','no'=>'0300'], 5 ['id'=>'00','no'=>'0000'], 6]; 7 8$list=['01'=>'4123','02'=>'3123','03'=>'2123']; 9 10foreach($arraydata as $data){ 11 $key=substr($data['no'],0,2); 12 if(in_array($key,array_keys($list))){ 13 $result=$list[$key]; 14 $id=$data['id']; 15 }else{ 16 $result=""; 17 $id=""; 18 } 19 print "id=".$id."<br>"; 20 print "result=".$result."<br>"; 21} 22

投稿2017/02/09 05:12

編集2017/02/09 06:47
yambejp

総合スコア114829

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

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

amaguri

2017/02/09 05:28

修正させていただきました。 どのようにすれば $dataの先頭が00のデータが来た場合に その列を処理せずスキップするコードをスマートにかけますでしょうか? $idが代入される前に識別するのがいいのでしょうか?
yambejp

2017/02/09 05:41

ご提示の例では$idも$resultもどこからも参照されていないので あまり意味がないですね。 またidとsubstr($data),0,2)は同じになるよう設定されていますが どちらか一つでいいんじゃないのでしょうか?
amaguri

2017/02/09 05:59

スキップするコードを書く意味がないということでしょうか? idのsubstrが同一になるのは承知しております。 データベースの構造がこのようなためそのまま記載させていただきました。
yambejp

2017/02/09 06:48

00がためなのか、それとも01,02,03以外がだめなのかで ちょっと書き方がかわってきます。 サンプルつけておきました。01,02,03以外はNGとしておきました
guest

0

そこで$idに代入してもすぐまた元に戻らない?

投稿2017/02/09 05:19

toutou

総合スコア2050

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

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

amaguri

2017/02/09 05:26

どうすれば 00の列の処理をスキップして 次の配列の処理をすることが可能でしょうか?
toutou

2017/02/09 05:35

continueでも使えばいいのでは
amaguri

2017/02/09 05:39

breakではなくcontinueを使う 理由を教えていただいてもよろしいでしょうか? continu文=強制的に(continue文)以降の処理を終了する( が処理ブロックの処理を継続する) とあるのですが 質問内容を訂正させていただきましたが continueの場合ですと 下の$wretの処理が値のないまま処理されるような気がするのですが、、
amaguri

2017/02/09 05:53

理解しました! ありがとうございます
toutou

2017/02/09 05:56

だったらbreakでいいんじゃない。その$wretとやらはなかったので知りませんでした。残念ながら力になれそうもないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問