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

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

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

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

Q&A

解決済

5回答

227閲覧

phpの二重分岐について

yuta_tokyo

総合スコア35

PHP

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

0グッド

0クリップ

投稿2019/02/25 20:28

編集2019/02/26 20:36

現在以下のようなプログラムが組まれているのですが、条件1と条件2内にそれぞれ同じ条件aと条件bの分岐(具体的にはスマホとPCでの表示内容の変更)をしたい場合、どのようなif分を書けばいいのでしょうか?

if(条件1){
条件1実行;
} elseif(条件2){
条件2実行;
}
else break;

======
イメージとしては
・条件1
・・条件a(スマホのとき)
・・条件b(pcのとき)
・条件2
・・条件a(スマホのとき)
・・条件b(pcのとき)

========
(追記)
上記だとうまく回らず、以下の構文を試しています。
スマホとそれ以外で最初分岐させたあと、再度分岐させる以下の構文はおかしいとこありますでしょうか?
うまく動かず困ってます...

foreach(){ if (スマホの時) { if(条件1){ } elseif (条件2){ } else break; } else { if(条件3){ } elseif (条件4) { } else break; } }

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

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

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

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

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

m.ts10806

2019/02/26 00:29

> プログラムが組まれているのですが 実際のコードを提示すべきかと。 コードを提示する際は原則として「他人がそのままコピペで動くもの」です。
guest

回答5

0

そもそもの構造がメンテしにくいです。
まず PC とスマホでテンプレートを分け、それぞれのテンプレートの中で条件 1,2 の分岐を実現させるのがキレイです。

投稿2019/02/26 00:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHP

1実行関数(条件1 or 2 or null,条件a or b);

で処理すればいいのでは?

投稿2019/02/26 00:30

yambejp

総合スコア114572

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

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

0

nskydivingさんのを使うとして、自分なら

$is_smt = ua_smt(); if(条件1){ //条件1共通 if ($is_smt) { //条件1のスマホ } else { //条件1のPC } } else if(条件2){ //条件2共通 if ($is_smt) { //条件2のスマホ } else { //条件2のPC } }

みたいな感じで

投稿2019/02/25 23:58

編集2019/02/26 00:50
takasima20

総合スコア7458

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

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

m.ts10806

2019/02/26 00:31

変数利用するならせめてPHPの構文に合わされたほうが。
takasima20

2019/02/26 00:46

ご指摘感謝します。
m.ts10806

2019/02/26 00:47 編集

「そもそも質問がちゃんとPHPコードじゃないじゃん」というのは本当にその通りですけどね・・
yuta_tokyo

2019/02/26 20:34

スマホとそれ以外で最初分岐させたあと、再度分岐させる以下の構文はおかしいとこありますでしょうか? うまく動かず困ってます... foreach(){ if (ua_smt() == true) { if(条件1){ } elseif (条件2){ } else break; } else { if(条件3){ } elseif (条件4) { } else break; } }
guest

0

単純に入れ子にするのではダメなんですか?

PHP

1if (条件1) { 2 if (スマホかどうか) { 3 スマホの表示内容 4 } else { 5 PCの表示内容 6 } 7elseif (条件2) { 8 if (スマホかどうか) { 9 スマホの表示内容 10 } else { 11 PCの表示内容 12 } 13}

投稿2019/02/25 23:51

Takumiboo

総合スコア2534

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

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

yuta_tokyo

2019/02/26 20:34

スマホとそれ以外で最初分岐させたあと、再度分岐させる以下の構文はおかしいとこありますでしょうか? うまく動かず困ってます... foreach(){ if (ua_smt() == true) { if(条件1){ } elseif (条件2){ } else break; } else { if(条件3){ } elseif (条件4) { } else break; } }
Takumiboo

2019/02/26 23:55

根本的におかしいですね…。 まずforeach(やfor)はループさせるときに使うものなので、今回の目的には合致しないと思われます。(しかももし使う場合でも、foreachの括弧内に何かしら入るはずです) 私が回答で示した構造は試されましたか?
yuta_tokyo

2019/02/27 00:07

なるほどです! ご回答された構文で試したのですが、スマホの時の制御がされませんでした。 === スマホの時、if文の一つ目の条件を10に、二つ目の条件(elseif以下)を20にしたいです。 PCの時は以下のような30、50にしたいです。 $i = 1; foreach ($P as $tmp){ if ($i <= 30) { fputs($fp, "<a href=¥"../$tmp/“>$i</a>”); } elseif ($i <= 50) { fputs($fp, "<a href="../$tmp/" target=“_blank”>$I</a>"); } else break; $i++; }
Takumiboo

2019/02/27 00:14

すみません、後出しでいろいろソースを出されても、誰からも適切なアドバイスはもらえないと思います。 現在書かれているソースの全体(全く無関係な部分は省いても構いません)、目的と期待する結果を質問に追記していただけますか?
takasima20

2019/02/27 00:25

$i をカウントアップする前に break してるからじゃないのかなあ。
guest

0

ベストアンサー

以下の記事に書いてあるようなやり方ではどうでしょうか?

ユーザーエージェントでスマホとPCを判別し、処理を変化させるPHPネタ

PHP

1function ua_smt (){ 2 //ユーザーエージェントを取得 3 $ua = $_SERVER['HTTP_USER_AGENT']; 4 //スマホと判定する文字リスト 5 $ua_list = array('iPhone','iPad','iPod','Android'); 6 7 foreach ($ua_list as $ua_smt) { 8 //ユーザーエージェントに文字リストの単語を含む場合はTRUE、それ以外はFALSE 9 if (strpos($ua, $ua_smt) !== false) { 10 return true; 11 } 12 } 13 14 return false; 15} 16 17$arr = array(1, 2, 3, 4); 18foreach ($arr as &$value) { 19 if (ua_smt() == true) { 20 if($value == 1){ 21 // 条件1 22 } 23 else if ($value == 2){ 24 // 条件2 25 } 26 else { 27 break; 28 } 29 } 30 else { 31 if($value == 3){ 32 // 条件3 33 } 34 elseif ($value == 4) { 35 // 条件4 36 } 37 else { 38 break; 39 } 40 } 41}

投稿2019/02/25 22:55

編集2019/02/26 22:35
nskydiving

総合スコア6500

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

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

退会済みユーザー

退会済みユーザー

2019/02/25 23:18

windows phone black Berry fire fox os (一同):僕たちを忘れないで
yuta_tokyo

2019/02/26 20:34

スマホとそれ以外で最初分岐させたあと、再度分岐させる以下の構文はおかしいとこありますでしょうか? うまく動かず困ってます... foreach(){ if (ua_smt() == true) { if(条件1){ } elseif (条件2){ } else break; } else { if(条件3){ } elseif (条件4) { } else break; } }
nskydiving

2019/02/26 22:39

回答のコードに二重分岐を含むようにしましたので、ご確認ください。 「うまく動かず」ではどこで困っているのかわからないので、完全なコードとエラーメッセージなどもご提示ください。 上記で言えれば「foreach()」や「if(条件1)」はエラーになるでしょう。
yuta_tokyo

2019/02/27 00:06

スマホの時、if文の一つ目の条件を10に、二つ目の条件(elseif以下)を20にしたいです。 PCの時は以下のような30、50にしたいです。 $i = 1; foreach ($P as $tmp){ if ($i <= 30) { fputs($fp, "<a href=¥"../$tmp/“>$i</a>”); } elseif ($i <= 50) { fputs($fp, "<a href="../$tmp/" target=“_blank”>$I</a>"); } else break; $i++; }
nskydiving

2019/02/27 00:17

回答に書いたように if 文の中に if 文を書くやり方でいけると思いますが、それでやってみてはどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問