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

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

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

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

Q&A

解決済

4回答

2068閲覧

PHP 比較演算子について

marusu

総合スコア16

PHP

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

0グッド

0クリップ

投稿2017/05/31 04:22

###前提・実現したいこと
初期の色を「黒」
プラスだったら「青」
マイナス「赤」
という感じに色がつくようにしたいです。

###該当のソースコード

<?php if($total_price_str >= 0){ $color = 'blue'; }else{ $color = 'red'; } ?> <?php printf ('<span style="color:' . $color . ';">%d円</span><br />', ceil($total_price_str)); ?>

###試したこと
上記のコードではうまくいきますが、比較演算子によって0が青のままに表示されてしまうので0を黒にするにはどんな感じに比較演算子を使ったらいいでしょうか?ご教授お願いします。

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

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

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

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

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

guest

回答4

0

PHP7以降ですが

php

1$colors = [ 2 -1 => 'red', 3 0 => 'black', 4 1 => 'blue', 5]; 6$color = $colors[$total_price_str <=> 0];

と書くと非常にスマートです。なんなら一時変数なしでも。

php

1$color = [ 2 -1 => 'red', 3 0 => 'black', 4 1 => 'blue', 5][$total_price_str <=> 0];

投稿2017/05/31 16:29

編集2017/05/31 16:34
mpyw

総合スコア5223

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

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

0

前提:
$total_price_strには必ず数値が入っている。

☆1つ1つ条件を整理する
・初期の色は黒
・プラスであるというのはすなわち 0より大きい
・マイナスであるというのはすなわち 0より小さい

それをそのままプログラムで書く。

PHP

1// 初期の色 black 2$color = 'black'; 3// 0より大きい場合 blue 4if($total_price_str > 0){ 5$color = 'blue'; 6// 0より小さい場合 red 7}else 8if($total_price_str < 0){ 9$color = 'red'; 10} 11// この時点で上記に当てはまった色文字列が格納されている

投稿2017/05/31 04:31

kanimaru

総合スコア1013

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

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

marusu

2017/05/31 04:43

ご回答ありがとうございました。 他の人と同じ回答でした。とても勉強になりました。 ありがとうございました。
guest

0

幾らでもやり方はありますが、今のやり方を活かすならこうですかね。
※未検証

PHP

1<?php 2$color = 'black'; 3 4if($total_price_str > 0){ 5$color = 'blue'; 6}elseif($total_price_str < 0){ 7$color = 'red'; 8} 9?> 10 11<?php printf ('<span style="color:' . $color . ';">%d円</span><br />', ceil($total_price_str)); ?>

投稿2017/05/31 04:30

m.ts10806

総合スコア80850

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

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

marusu

2017/05/31 04:42

ご回答ありがとうございました。 なるほどです。最初の段階に黒の値を変数に格納すればいいのですね。 ありがとうございました。勉強になりました。
m.ts10806

2017/05/31 04:55 編集

ただ、htmlやbodyなどの全体の要素でCSSで色を指定していない限りは黒がデフォルト色となりますので、その場合はblackの指定がいらなくなりますし、styleも不要になると思います。 ちょっとした課題ですが今度は「黒になる場合はstyle指定なし」というのにもチャレンジしてみてください。 あと、金額の表示のようですが、money_format()という関数もあるのでそちらの方が処理がすっきりしそうですね。 http://php.net/manual/ja/function.money-format.php
guest

0

ベストアンサー

PHP

1if($total_price_str == 0){ 2 $color = 'black'; 3} else if($total_price_str > 0){ 4 $color = 'blue'; 5}else{ 6 $color = 'red'; 7}

修正版

PHP

1<?PHP 2$total_price = ceil($total_price_str); 3if($total_price == 0){ 4 $color = 'black'; 5} else if($total_price > 0){ 6 $color = 'blue'; 7}else{ 8 $color = 'red'; 9} 10?> 11 12<?php printf ('<span style="color:' . $color . ';">%d円</span><br />', $total_price_str); ?>

投稿2017/05/31 04:30

編集2017/05/31 04:38
ttyp03

総合スコア16998

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

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

marusu

2017/05/31 04:32

ご回答ありがとうございます。 試したことに書き忘れてましたが、私の方で同じコードを試して見たのですが黒のままでした。
ttyp03

2017/05/31 04:39

もしかしてceilを使っているということは小数値ですか? という前提で修正版を追記しておきました。 これでいかがでしょうか。
marusu

2017/05/31 04:41

度々コードミスがありました。 ご教授くれたコードでうまくいくことができました。 最初の段階で==を使えばよかったのですね。 単純なことなのに思いつきませんでした。 ありがとうございました。
ttyp03

2017/05/31 04:42

もしかして==ではなく、=にしてたってオチですか…。
marusu

2017/05/31 04:45

過去に遡って自分のコードを確認したところその通りでした。 比較演算子に3時間も悩んでたのでとてもすっきりしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問