• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで似たコードを繰り返す場合の簡潔な書き方??)

PHPで似たコードを繰り返す場合の簡潔な書き方

このQ&Aのポイント
  • PHPで似たコードを繰り返す場合、効率的な方法はありますか?
  • データベースのデータを表示する際に、似たようなPHPコードを繰り返しています。効率的な書き方はありますか?
  • PHPで同じような処理を繰り返す場合、コードを簡潔にする方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

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.' いずれでもありません。'; } }

rabbit-kimura
質問者

お礼

ご回答ありがとうございます!! >> for( $i=1; $i<=5; $i++ ){ for文というのでしょうか、使いこなせてなくてこのような使い方すればよいのですね・・・ 勉強になりました、無事できました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.4

Ano3 間違いすみません。 $row は status1~5だけとは限りませんでしたね。 foreach($row ~ )の部分はANo2さんのように forにして番号を付加したり、あるいは別の配列を用意して  foreach( array($row['status1'],$row['status2'] ~)  と必要な部分のみ回るようにする必要があります。

rabbit-kimura
質問者

お礼

追記もありがとうございます参考になりました!!

全文を見る
すると、全ての回答が全文表示されます。
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.3

検索語と、それぞれに対応させる語句を配列にしておいて、後方参照で取り出す方法もあります。 $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

rabbit-kimura
質問者

お礼

ご回答ありがとうございます!! すっごくまとまるのですね・・・参考になります!! また elseif についてなのですが、こちらも補足ありがとうございました!! 他所にも多量に if(){}~else{ if(){}} 使ってましたので 早速活用することができました、ありがとうございます!!

全文を見る
すると、全ての回答が全文表示されます。
  • piraippi
  • ベストアンサー率27% (47/168)
回答No.1

単純statusを受けとって、「新規です」とか「更新です」とかを返すファンクションをつくればいいのではないですか?

rabbit-kimura
質問者

お礼

お早いご回答ありがとうございます!! やはり私は、単純なものをダラダラ書いてたんですね・・・ functionですね、これは勉強不足でした、活用してみます!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 携帯、スマートフォンのPHP振り分け

    こんなPHPを書いているのですが どうしてもParse errorが出ます。 解決方法を教えて下さい!! ■エラー内容 Parse error: syntax error, unexpected T_EXIT in /home/sites/heteml/users/web/m/index.php on line 5 ■振り分けPHP <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: ​http://www.hogehoge.com/m/i/index.html");​ exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: ​www.hogehoge.com/m/s/index.html");​ exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: ​www.hogehoge.com/m/e/index.html");​ exit(); }else if(preg_match("iPhoneやスマートフォン用の判定", $agent)){ header("Location: www.hogehoge.com/m/smt/index.html"); exit(); }else{ header("Location: ​www.hogehoge.com/m/pc/index.html");​ exit(); } ?> よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpでエージェントの振り分けがうまくいかない

    phpでエージェントの振り分けがうまくいかない 以下のようにmフォルダの中にindex.phpを以下の内容で設置し、同列でi,a,sフォルダを設け それぞれindex.htmlを設けました。しかし携帯でhttp://hoge.com/m で打つとサイトがみつかりませんになります。<?phpより上は空白、改行はありません。 振り分けがうまく機能しないのはなぜでしょうか? <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://hoge.com/m/i/index.html"); exit; }else if(preg_match("/^(J?-PHONE|Vodafone|MOT?-[CV]|SoftBank)/i", $agent)){ header("Location: http://hoge.com/m/s/index.html"); exit; }else if(preg_match("/^KDDI?-/i", $agent) || preg_match("/UP?.Browser/i", $agent)){ header("Location: http://hoge.com/m/a/index.html"); exit; }else{ header("Location: http://hoge.com/index.php"); exit; } ?>

    • ベストアンサー
    • PHP
  • PHPで文字を検索して取り込みたい。

    PHPで文字を検索して取り込みたい。 %の文字が、何度か出現するソースなのですが そのソースの中にある50%のような全角で%の数値を 取り込みたいのです。 //////ソース//////// <table> <TR> <TD>あ</TD> <TD><B>88%</B>/TD> </TR> <TR> <TD>す</TD> <TD><B>85%</B>/TD> </TR> ........... </table> /////////////////////// 下記のように実行しましたが 思うような結果は得られません。 <?php $str = file_get_contents('http://123456/index.html'); if (preg_match('!<table>\s*?(.*?)</table>!s', $str, $res)) $text = mb_convert_encoding($res[1],"shift-jis","UTF-8");preg_match_all("/-*[0-9]+/",str_replace(",","",$text),$matches); print ($matches[0][0]); ////////////////////////////// php初心者です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯ユーザーのPHPによる振り分け

    WindowsXP dreamweaverCS3を使用 PHPの知識はまったくありません。 PCサイト「www.deri6mon.com」(PC用サイト)がすでにできており、 これをQRコードに変換してあります。 そのQRコードをユーザーがスマホと携帯のバーコードリーダーで変換し、 PCサイトにアクセスさせますが、携帯ユーザーは当然容量がオーバーしますので エラーでとまってしまいます。 そこで、別に携帯サイトを用意してPCサイトにアクセスしてきた携帯ユーザーを 携帯サイトに自動で振り分けたいと考えています。 PCサイトの最上部に下記を記述しました。 PHPを書き込んだファイルはhtml→phpに拡張子を変換してあります。 -----------------ここから------------------- <?php $page_m='http://www.deri6mon.com/mb/index.html'; $agent=$_SERVER['HTTP_USER_AGENT']; if (preg_match("/UP\.Browser\/[3-5]/",$agent) || preg_match("/J-PHONE\//",$agent) || preg_match("/DoCoMo\//",$agent) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS¥/2|Solaris)/i",$agent)) || preg_match("/UP.Browser/",$agent) || preg_match("/^Vodafone/",$agent) || preg_match("/^SoftBank/",$agent) || preg_match("/^MOT-/",$agent) || preg_match("/DDIPOCKET;/",$agent) || preg_match("/WILLCOM;/",$agent) || preg_match("/L-mode\/\//",$agent)) { header("Location: $page_m"); }else{ }//end if ?> -----------------ここまで---------------- しかしどうしても携帯でPCサイトが表示されてしまいます。 どこの設定(記述)をどうしたら良いのでしょうか。 因みにhttp://emu.mobile.goo.ne.jp/emu/emu.phpでPCサイトのアドレスを入れると携帯サイトのTESTが表示されるので記述は問題ないと思います。 教えてgooの過去Qを調べてみて気がついた記述が、私が使っているサーバーは 自動で挿入される広告があり「header Locationはエラーになる」というのが ありました。 これを回避するにはどうすればいいのでしょうか? PHPの知識が無いのでわかりやすく回答していただけるとたすかります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現での最後尾のバックスラッシュの扱いについて

    使用しているSQLテーブルで、フィールド名siteurlに格納しているURLの最後尾にスラッシュがついているものとついていないものがあるので、つけるように統一しようと思います。 PHPを書き、実行したところ、次のようなエラーが出てきました。 Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in C:\xampp\htdocs\sql_open.php on line 42 この部分のコードは次の通りです。 if(!preg_match("\/$",$row["siteurl"])){ //行末がスラッシュでないならスラッシュを追加する $row["siteurl"].="/"; } エラーの内容を考えて、コードを以下のように修正したところ、 if(!preg_match("\/$",$row["siteurl"])){ //行末がスラッシュでないならスラッシュを追加する $row["siteurl"].="/"; } というエラーが出てきます。 preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\sql_open.php on line 42 正規表現はあまり得意ではなく、どこかしら間違いがあったのかもしれませんが自分ではわかりません。 この問題の解決方法をご教示ください。どなたかご教示のほど、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの正規表現 メール受信と文字コードについて

    Yahooのメールサーバに接続しメールを取得、メール本文に特定の語句が含まれているか調べたいのですが、うまく行かず悩んでいます。 SJIS文字コードが原因なんでしょうか? かなり長い文章になるので、お暇でしたらご教授下さい。 PHP Version 5.2.5です。 以下のプログラムでの問題点です。 <?php $mb=imap_open("{pop.mail.yahoo.co.jp:110/pop3}INBOX","ID","pass") or die("メールボックスを開けません<br>"); $i=4;//メール番号 //imap_fetchbody、mb_convert_encodingで取得した変数<$body_sjis>と比較する為、メール本文を変数<$mail_honbun>としてファイル内に定義。 $mail_honbun="次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解」はこのあとすぐ。仕上げの湾カールが決まるのは:エッセンシャルダメージケア新発売"; $body=imap_fetchbody($mb,$i,1,FT_PEEK);//本文取得 $body_sjis=mb_convert_encoding($body,"SJIS","auto");//SJISに変換 echo("$body_sjis<br><br><br>"); echo("[mail_honbunの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/次の.+正解/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$mail_honbun,$temp))//NG 何故ダメージはマッチしない? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); echo("---------------------------------------<br>"); echo("[body_sjisの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$body_sjis,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/書き.+正解/",$body_sjis,$temp))//NG 。を超えるとマッチしない echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$body_sjis,$temp))//OK エッセンシャルはOK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$body_sjis,$temp))//NG ダメージがNG、何故? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); ?> ## 結果 ######################################################## [mail_honbunの場合] 次のことはを感じで、書きなさい。 次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解 エッセンシャル NOT MATCH --------------------------------------- [body_sjisの場合] 次のことはを感じで、書きなさい。 NOT MATCH エッセンシャル NOT MATCH ################################################################# 問題点<$mail_honbun>の場合 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 問題点<$body_sjis>の場合 。を超えるとマッチしない事。 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 自分で何が問題なのか、何を知らないのかがはっきりしません。 文字コードSJISを使わない方がいいのでしょうか? 参考になる事や、調べたら解決しそうなキーワードがあれば教えて下さい。宜しくお願いします。 ファイル"php.ini"の設定 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII

    • ベストアンサー
    • PHP
  • 【PHP】「ereg_match」はなぜ不人気なのか?

    PHP初心者です。 現在ファイルの中を英語や日本語で検索するプログラムを作っています。 検索といえば「preg_match」が一番人気あるように見えます。しかしたとえば、 mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); if(preg_match( '/我輩は.である/' ,'我輩は猫である')){ print "マッチ!"; } 上記のような使い方をすると「.」は「猫」にマッチせず「...」にするとようやくマッチします。「preg_match」はマルチバイトに対応していないのでしょうか。 そこでマルチバイトと正規表現に対応した検索関数「mb_ereg_match」を知りました。 if(mb_ereg_match( '我輩は.である' ,'我輩は猫である')){ これなら正常にマッチします。 がしかし… 「mb_ereg_match」は全然辞書に載ってません。分厚いPHP辞書をいくつも持ってますが「ereg_match」すら載ってません。何か不人気の理由があるのでしょうか?気に入ったのに不安で使えません。 お詳しい方、解説よろしくお願いいたします。

    • 締切済み
    • PHP
  • 【PHP・.htaccess】PCと携帯の振り分けについて

    【PHP・.htaccess】PCと携帯の振り分けについて お世話になります。 PHP・.htaccess共に初心者なのですが、 PCサイトと携帯サイトの振り分けで悩んでいるので宜しくお願い致します。 現在の構成が http://sample.com/ ←トップページ(PHPファイルのみ。各トップへ振り分け) http://sample.com/pc/ ←PCトップページ http://sample.com/mo/ ←モバイルトップページ(.htaccessでIP制限。PCからのアクセスはトップへ) ---------------------------------------------------- 振り分けPHP(http://sample.com/) <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://sample/mo/"); exit; }else if(preg_match("/^(J-PHONE|Vodafone|MOT-[CV]|SoftBank)/i", $agent)){ header("Location: http://sample/mo/"); exit; }else if(preg_match("/^KDDI-/i", $agent) || preg_match("/UP.Browser/i", $agent)){ header("Location: http://sample/mo/"); exit; }else{ header("Location: http://sample/pc/"); exit; } ---------------------------------------------------- となって居ますが、都合により http://sample.com/ ←PCトップ モバイルからのアクセスはmoに振り分け。 http://sample.com/mo/ ←モバイルトップページ。(.htaccessでIP制限。PCからのアクセスはトップへ) 上記の形に切り替えたいと思っています、 PHPを使って振り分けをしたいと思っているのですが、 上記の形を再現する事は出来ますでしょうか? また、.htaccessを利用する事により解決が出来るのであれば、 そちらもご教授いただけると幸いです。

    • 締切済み
    • PHP
  • php ページャー

    php ページャー機能がうまくいきません。 ご教授お願いいたします。 ページリンク2、3と押しても ページが移動しません。 ずっと一ページ目のままです。 解決方法よろしくお願いいたします。 index.php peger.php 書きソースはpeger.phpです。 index.htmlとのソースの違いは if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } のプログラムががindex.phpにはないだけです。 <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>検索</title> </head> <body> <?php if(preg_match('/^[1-9][0-9]*$/', $_GET['page']) ){ $page = (int)$_GET['page']; }else{ $page = 1; } $page = 1; $limit = 2; $offset = $limit * ($page - 1); $dsn='mysql:dbname=****;host=****'; $user='*****'; $password='*****'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT count(*) FROM `mst_product`'; $stmt=$dbh->prepare($sql); $stmt->execute(); $db=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql = 'SELECT * FROM mst_product ORDER BY code DESC LIMIT '.$limit.' OFFSET '.$offset.' ' ; $stmt = $dbh->prepare($sql); $stmt->execute(); $db = null; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo $row['name']; echo'</br>'; echo $row['price']; } echo '<ul class="pager">'; ?> <?php if($page > 1){?> <li><a href="pager.php?page=<?php echo $page-1; ?>"> << </a></li> <?php } for($i = $page; $page-2 < $i && $i <= $page+4 && $i <= $lastpage; $i++){ ?> <?php if($i == $page){ ?> <li><a href="kensaku_pager.php?page=<?php echo $i; ?>"><?php echo '<font color="#FF4DC4">'.$i.'</font></a></li>'; }else{?> <li><a href="pager.php?page=<?php echo $i; ?>"><?php echo $i.'</a>'; ?> <?php echo '</li>'; } } if($page < $lastpage){ ?> <li><a href="pager.php?page=<?php echo $page+1; ?>"> >> </a></li> <?php } ?> </ul> </body> </html>

    • ベストアンサー
    • PHP
  • 携帯とPCの振り分け

    同じドメインにて携帯とPCの振り分けなのですが、htaccessにて振り分けたのですが、ブラウザに「振り分けがループしています」とでるのですが、 これはなぜでしょう? htaccessの中身の内容ですが、 DirectoryIndex index.php index.html index.htm これで読み込んだindex.phpの中身は <?php $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ header("Location: http://www.○○○○○.com/mobile/index.xhtml"); exit; }else{ header("Location: http://www.○○○○○.com/"); exit; } ?> サーバはlolipopでhtaccessのパーミッションは604で phpのパーミッションは700です。

    • 締切済み
    • CGI