- ベストアンサー
PHPで似たコードを繰り返す場合の簡潔な書き方
- PHPで似たコードを繰り返す場合、効率的な方法はありますか?
- データベースのデータを表示する際に、似たようなPHPコードを繰り返しています。効率的な書き方はありますか?
- PHPで同じような処理を繰り返す場合、コードを簡潔にする方法はありますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
pregの正規表現用の文字列と出力文字とが対応してるなら、それらを配列に入れて、さらにチェックされる側も複数なので、2重ループで回せば? 固定文字の有無を調べてるのなら、pregより、strpos() の方が速いですけど <?php $needles = array('新規','更新','削除'); for( $i=1; $i<=5; $i++ ){ $haystack = $row[ 'status'.$i ]; $chk = 0; foreach( $needles as $nee ){ if( strpos($haystack, $nee) !== false ){ $table .= $haystack.' '. $nee . 'です。'; $chk ++; break; } } if( $chk<1 ){ $table .= $haystack.' いずれでもありません。'; } }
その他の回答 (3)
- JaneDue
- ベストアンサー率75% (263/350)
Ano3 間違いすみません。 $row は status1~5だけとは限りませんでしたね。 foreach($row ~ )の部分はANo2さんのように forにして番号を付加したり、あるいは別の配列を用意して foreach( array($row['status1'],$row['status2'] ~) と必要な部分のみ回るようにする必要があります。
お礼
追記もありがとうございます参考になりました!!
- JaneDue
- ベストアンサー率75% (263/350)
検索語と、それぞれに対応させる語句を配列にしておいて、後方参照で取り出す方法もあります。 $texts = array("新規"=>" 新規です","更新"=>" 更新です","削除"=>" 削除です"); $table = ''; foreach($row as $val){ $table .= preg_match("/新規|更新|削除/",$val,$match) ? $val.$texts[$match[0]]: "いません"; } echo $table; ? : については三項演算子を参照下さい。 http://php.net/manual/ja/language.operators.comparison.php また、if/else でやる場合は、if(){}~else{ if(){}} と入れ子にしなくても elseif があります。 http://jp2.php.net/manual/ja/control-structures.elseif.php
お礼
ご回答ありがとうございます!! すっごくまとまるのですね・・・参考になります!! また elseif についてなのですが、こちらも補足ありがとうございました!! 他所にも多量に if(){}~else{ if(){}} 使ってましたので 早速活用することができました、ありがとうございます!!
- piraippi
- ベストアンサー率27% (47/168)
単純statusを受けとって、「新規です」とか「更新です」とかを返すファンクションをつくればいいのではないですか?
お礼
お早いご回答ありがとうございます!! やはり私は、単純なものをダラダラ書いてたんですね・・・ functionですね、これは勉強不足でした、活用してみます!!
お礼
ご回答ありがとうございます!! >> for( $i=1; $i<=5; $i++ ){ for文というのでしょうか、使いこなせてなくてこのような使い方すればよいのですね・・・ 勉強になりました、無事できました!!