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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

Q&A

解決済

2回答

1104閲覧

PHPのifが上手くいかないので教えてください。

yokonohito

総合スコア7

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PHP

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

0グッド

0クリップ

投稿2017/08/21 17:08

###前提・実現したいこと
DMM商品情報APIを検索して該当数[result_count]を調べ、PHPのifを使い、0なら「DMMで取り扱っていません」と表示させ、1以上なら「DMMで取り扱っています」と表示させたい。

PHP Version 7.0.21

###発生している問題・エラーメッセージ
result_countが0の時でも1として扱われている。result_countが1の時も1として扱われている。なので該当数が0の時も「取り扱っています」と表示されてしまう。

if(count9===0)にしたとき

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

require_once('simple_html_dom.php'); $htmla = file_get_html(DMMのAPI); $count=$htmla->find('result result_count'); foreach($count as $count9){ echo "該当数:",$count9; //↑表示させると正しい } echo '<br>'; if(count9===0){ echo "DMMでは取り扱っていません"; }else{ echo "DMMでは取り扱っています"; }

###試したこと
試しにecho $count9+1;としてみたらresult_countが0の時は2と表示され、result_countが1の時も2と表示された。

count9===0または"0"
count9==0または"0"
"echo $count9"===0
"echo $count9"==0

なども試したら「"echo $count9"==0」の時はresult_countが0の時は「取り扱っていません」と正しく表示されたが、result_countが1の時も「取り扱っていません」と表示されてしまう。

###補足情報(言語/FW/ツール等のバージョンなど)
PHP Version 7.0.21

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

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

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

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

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

guest

回答2

0

ベストアンサー

これでどうでしょう。

PHP

1require_once( 'simple_html_dom.php' ); 2$htmla = file_get_html( 'DMMのAPI' ); 3$count = intval( $htmla->find( 'result result_count' ) ); 4if ( $count === 0 ) { 5 echo "DMMでは取り扱っていません"; 6} else { 7 echo "DMMでは取り扱っています"; 8}

【PHP: intval - Manual】
http://php.net/manual/ja/function.intval.php


追記:

これでもエラーが出ますか?

PHP

1//エラー出力強制 2ini_set( 'display_errors', 1 ); // エラーを画面に表示(1を0にすると画面上にはエラーは出ない) 3//すべてのエラー表示 4error_reporting( E_ALL ); 5 6$url = "https://api.dmm.com/affiliate/v3***&output=json"; // &output=jsonにする。 7$contents = file_get_contents( $url ); // これも元のとは違います 8$json = json_decode( $contents ); 9 10$count = intval( $json->result->result_count ); 11if ( $count === 0 ) { 12 echo "DMMでは取り扱っていません"; 13} else { 14 echo "DMMでは取り扱っています"; 15}

【DMM API ver3.0 入門【PHP】 | コケムスシェルター】
http://hytool.org/archives/7192

投稿2017/08/21 17:17

編集2017/08/21 18:41
kei344

総合スコア69398

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

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

yokonohito

2017/08/21 17:41

ありがとうございます。しかし、まだresult_countが0の商品を検索してみると「取り扱っています」と表示され、echo $count;とすると1と表示されてしまいます。
kei344

2017/08/21 17:44

var_dump($htmla->find( 'result result_count' ));これで何が出ますか?
yokonohito

2017/08/21 18:01 編集

require_once('simple_html_dom.php'); $htmla = file_get_html('DMMAPI'); $count = intval( $htmla->find( 'result result_count' ) ); var_dump($htmla->find( 'result result_count' )); if ( $count === 0 ) { echo "DMMでは取り扱っていません"; } else { echo "DMMでは取り扱っています"; } としましたが「取り扱っています」も何も表示されなくなってしまいました。
kei344

2017/08/21 18:21

require_once より前に下記を追記してください。 //エラー出力強制 ini_set( 'display_errors', 1 ); // エラーを画面に表示(1を0にすると画面上にはエラーは出ない) //すべてのエラー表示 error_reporting( E_ALL );
yokonohito

2017/08/21 18:31

ありがとうございます。 Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 75300864 bytes) in /home/phtavtyk/public_html/ドメイン/wp-includes/functions.php on line 3721 というエラーが出ております。
yokonohito

2017/08/21 18:58

提示してくださったjson形式にしたらしっかりifが機能するようになりました!遅い時間なのにありがとうございました。
guest

0

PHP

1 if(count9===0){

PHP

1 if($count9===0){

では?

投稿2017/08/21 18:06

tanat

総合スコア18713

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

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

yokonohito

2017/08/21 18:15

ありがとうございます。すみません。$を付けてませんでした。しかし、 if($count9===0){ でも試してみましたが、result count0で「取り扱っています」となってしまいます。
tanat

2017/08/21 18:19

var_dump($count9); if($count9===0){ という感じで$count9の型も含めて表示させるとどうなりますか? ===は型も含めて厳密に比較する演算子なので、echo $count の結果が0でも、文字列の0の場合は if("0" === 0){ }else{ //かならずこちらに入る } という感じの処理になります。
yokonohito

2017/08/21 18:43

ありがとうございます。そうなんですね。 var_dump($count9);を入れると Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71671808 bytes) in /home/phtavtyk/public_html/ドメイン/wp-includes/functions.php on line 3721 というエラーが出てしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問