• ベストアンサー

if文での0の挙動

kool_noahの回答

  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.1

if文の中に入るとリストが返されるんですよね 上記の書き方だと、0が入ってきたら空ではないので、if文の中に入るので、リスト返されるのは当然なのでは? まず、$flagの定義をしっかりとしましょう。 phpは変数の型定義をしなくてもでき、if文はif文でtrue,1は同じ挙動したりするので、こういった場合に問題が発生します 今回はflagの変数はbooleanではなく、intとして扱うつもりなのでしょうか?で、あれば function userlist($flag = 0){ if($flag == 1){ // リストを取得するSQL文 } } とすべきかと思います。これでデフォルトだと0が設定されているので、明示的に1を渡さないとリストを返しません。 もしくは function userlist($flag = null){ if(!is_null($flag) && $flag == 1){ // リストを取得するSQL文 } }

bacchus047
質問者

補足

$falgの値によって以下の検索結果を想定しています。 $flag == null => 全顧客リスト $flag == 0 => 未使用顧客リスト $flag == 1 => 使用顧客リスト $flagがnullの場合と0の場合で別の結果を取得したいです。

関連するQ&A

  • アクセス制限

    以下スクリプトは$denyに拒否したいリストを記述するのですが、$denyに記述したリストのみをアクセス許可にしたいと思っています。試しに2行目の$flag=0;を$flag=1;にし、4行目$flag=1;を$flag=0;にしましたところ、$denyに記述したリストのみアクセス許可することができたようですが、これで問題ないでしょうか?よろしくお願いいたします。 if ($deny) { $flag=0; foreach (split(/\s+/, $deny)) { if ($host =~ /$_/i) { $flag=1; last; } } if ($flag) { &error("コメント") } }

    • ベストアンサー
    • Perl
  • 文字例の比較について WHERE句

    文字例の比較について、教えてください。 DELETE_FLAGという項目には、文字列の"1"、もしくはNULLが入っています。 セレクト文でDELETE_FLAGが"1"以外のものを抽出したいのですが、うまくいきません。 以下のSQL文を実行した際に、結果として5件ヒットしてほしいのですが、なぜか0件となってしまいます。 select count(product_id) from hpk_atoz_list_view where delete_flag != '1'; 原因わかりますでしょうか? よろしくお願いいたします。 ============================================================================ SQL> select delete_flag, product_id from product_list_view; DELETE_FLAG product_ID ---------------------------------   0002 1 1003   0002 1 1003   0002 1 1003   0002   0002 8行が選択されました。 SQL> SQL> select count(product_id) from product_list_view where delete_flag != '1'; COUNT(product_id) ---------- 0 SQL> SQL> select count(product_id) from product_list_view where delete_flag = '1'; COUNT(product_id) ---------- 3 SQL> SQL> select count(product_id) from product_list_view where delete_flag is not null; COUNT(product_id) ---------- 3 SQL> SQL> select count(product_id) from product_list_view where delete_flag is null; COUNT(product_id) ---------- 5 SQL> =====以上=====

  • どうしたら確認ができますか!?

    以下参考書をそまま入力しました。 ] ---------------------------------------------------  論理積と論理和では、2通りの表記方法がありますが、これは演算子の優先順位(注6)が違います。 (注意6)優先順位については3.2.3(P80)を参照 <?php $flag and foo(); if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; }  この列では、引数が与えられているかをまずチェックし、与えられている場合はそれが真である かを調べます。論理演算子では、評価結果がわかった時点で演算結果を返します。これを短絡評価 といいます。短絡評価されるため、最初のisset($argv[1])が為である場合、次の$argv[1]の評価 は一切行われません(もし評価されてしまったならば、NOtic:Undefined offset:1となってしまい ます)。  たとえば、次の例では、$flagが為の場合では、関数foo()が呼ばれることはありません。 <?php $flag and foo();   ----------------------------------------------------------- 以上ですが、 これって、どうしたら確認ができますか!?   xamppは働いています。    HTMLで試しましたがParseエラーがでました。 <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上の実行結果は 以下です。 Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ',' or ')' in C:\xampp\htdocs\study.localhost\php.php on line 10  以上です。    よろしくお願いします。  

    • ベストアンサー
    • PHP
  • if文の繰り返し・・・?

    $cnt = 0; foreach($sample as $val){ list($id,$date,$comment ,$comment1,$comment2) = split("\t",$val); $cnt++; $date = split("/",$date); if (ereg($date[$cnt0], $val)) { $sample .=<<<EOM <tr></td>$id</td><td>$comment</td><td>$comment1</td></tr> EOM; } echo <<<EOM <table> $sample </table> EOM; として、配列の中からdate[$cnt]に一致したものをすべて出したいのですが、上記のようにすると、 最初に一致したものしか排出されません。 date[0]と一致するものを探すため$sampleを上から流れて、 一致したところからdate[1]を探すようになってしまってるからだと思うのですが、、、、。 これをdate[0]と一致するものが見つかった場合、 一番上から再びdate[1]を検索するといった感じにしたいのですが、 この場合どうしたらよいのでしょうか。

    • ベストアンサー
    • PHP
  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • caseを使った条件分岐の加算がうまくいかない

    SQLで条件によって加算するか、しないかを判定したいと思っています。 ■テーブル:test name,flag,number mike,4,1 mike,4,2 mike,5,3 mike,6,4 mike,7,5 mike,8,6 mike,9,7 ■書いたSQL SELECT test.name AS "name", (CASE WHEN flag = '4' THEN sum(number) ELSE NULL END) AS "4", (CASE WHEN flag = '5' THEN sum(number) ELSE NULL END) AS "5", (CASE WHEN flag = '6' THEN sum(number) ELSE NULL END) AS "6", (CASE WHEN flag = '7' THEN sum(number) ELSE NULL END) AS "7", (CASE WHEN flag = '8' THEN sum(number) ELSE NULL END) AS "8", (CASE WHEN flag = '9' THEN sum(number) ELSE NULL END) AS "9" FROM test GROUP BY test.name ■結果 4,5,6,7,8,9 null,null,null,null,null,28 欲しい結果は、フラグが4ののものの合計。flagが「4」の場合は、「3」という結果が返ってきてもらいたいです。 flagが5の場合は、3が返ってきてもらいたいです。 SQLが間違っているのですが、どこが間違っているのかわかりません。どのように修正すればよろしいでしょうか?よろしくお願いします。 環境はSQLiteを使用しています。

  • exelのIF関数 どこがダメなのかわかりません

    初めて質問をさせていただきます。 至らない部分があるかと思いますがご容赦ください。 ExcelでIF関数を使っていて下のように打ち込みました。 =IF(D12="","",IF(F12>$C$1,$C$1-E12-$C$7,F12-E12-$C$7,IF(F12>$C$4,$C$4-E12-$C$7,F12-E12-$C$7,IF(F12>$C$6,$C$6-E12-$C$7,F12-E12-$C$7)))) 「この関数について、多すぎる引数が使われています。」 というポップが出ます。調べてみると「、」や「()」が必要のないところについてる場合が多い。ということが書かれていたのですが、何度確認してもどれが不必要なのかわかりません。 稚拙で無駄のある数式なのですが、どこが間違っているか教えていただけないでしょうか。

  • SQLserverのIF文について

    どうしてもIF文がうまくいきません IF文の中にIFを入れ子していますそのIFが複数の条件があります 今までACCESSではELSEIFで条件をいくらでも指定できたのですがSQLの場合はエラーになってしまいます ご教授おねがいします ------------------------------ set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_part端数処理] ( @PTHASU nvarchar(10), @haken nvarchar(10) ) RETURNS real AS BEGIN DECLARE @PARTT real DECLARE @PARTT_H real if (not(@PTHASU is null)) if @haken='派遣' or @haken='臨時' if substring(@PTHASU,4,2)>= 50 SET @PARTT = convert(int,LEFT(@PTHASU,2)+1)*60 --ここをいれるとエラー IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30 --ここをいれるとエラー if substring(@PTHASU,4,2)< 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 ELSE SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1 ELSE SET @PARTT= 0 SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000)) RETURN @PARTT_H END

  • strtokについて

    strtokを使うにあって注意すべき点がしりたいのですが、 test1やtest2は書き換わるので、変わっては困る場合は あらかじめコピーしておくのは理解しましたが、 strtokをネストして使う場合、(1)で必ずNULLになります。 strtokはネストでは使えないのでしょうか? また、他に注意点があるのでしたら教えてください。 あと、C++では、strtokより便利なものはありますか? char test1[] = "111,222,333"; char test2[] = "333,222,111"; char *p, *q; int flag; p = strtok(test1, ","); while ( p != NULL ) { flag = 0; q = strtok(test2, ","); while ( q != NULL ) { if (0 == strcmp(p, q)) { flag = 1; break; } q = strtok( NULL, ","); } if (flag == 0) { return 1; } p = strtok( NULL, ","); // <------- (1)ここで必ずNULL }

  • MYSQL ストアドプロシージャの記述方法

    MYSQLのストアドプロシージャについて分からないことがあり質問させて頂きます。 SQLのwhere句の部分を引数によって条件分で変更させたいと考えています。そこでORACLEの場合は変数にいれて最後に明示的にSQLを発行して いたので可能だったのですが、MYSQLの場合はどういった記述になる のかわかりません。やりたいことは下記のような感じです。 ORACLEの場合は procedure prctest(pc out refcur,a in varchar2,b in varchar2) is sqldata varchar2(1000); whereinfo varchar2(1000); begin sqldata := 'select ID , NAME from testTbl '; if (a IS NOT NULL) then   whereinfo := whereinfo || ' acol = a ' ; end if; if (b IS NOT NULL) then   if (whereinfo IS NOT NULL) then  whereinfo := whereinfo || ' and ';   end if;   whereinfo := whereinfo || ' acol = b ' ; end if; if (whereinfo IS NOT NULL) then  sqldata := sqldata || ' where ' || whereinfo ; end if; open pc for sqldata; (ここでSQLが入ったSQLを発行) end prctest; (抜粋) ストアドをあまり使用したことがなく良い説明ではないかも しれませんが、アドバイスの方頂けたらと思います。 よろしくお願いします。