IFで一致しない現象についての質問

このQ&Aのポイント
  • IF文で条件式が一致しない現象について質問します。
  • 条件式の中で変数$aと変数$bの値を表示させると同じ数字が表示されますが、条件式はFalseを返します。
  • 変数の値に違いがあるのか、またはデータ形式のフォーマットに問題があるのかを確認する方法を教えてください。
回答を見る
  • ベストアンサー

IFで一致しない現象

とても勘違い的な質問で申し訳ないのですが 行き詰ってしまったので質問させて下さい。 IF($a == $b) print("OK"); 上記のようなとても単純な条件式ですが 上手くいかないのはなぜでしょうか? $a、$bの値は下記のような感じなんですが・・・ $a = $_GET["a_data"]; $FILE = file("test.dat"); $b = $FILE[0]; print()で$a,$bを表示させると確かに同じ数字です。 しかし、条件式ではFalseが返ってきます。 データ形式のフォーマットに違いがあるのでしょうか? もしそうだとしたら、そのフォーマットを確認するような 関数がありますでしょうか? ちなみに $a,$b共にtrim()で空白などを削除してもダメでした。

  • ajyak
  • お礼率33% (2/6)
  • PHP
  • 回答数5
  • ありがとう数2

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

No.4です。 >ひょっとしてメモ帳でUTF保存してBOMが先頭に付いていませんか?>test.dat。 と書いたあとで念のため試してみたらstrlen()が4になりますね。おそらくutf-8で保存してBOM(表示しても見えない)が先頭に付いていると思います。

ajyak
質問者

お礼

ご回答ありがとうございます。 まさにそれが原因でした。 テキストファイルの拡張子を変更しただけだったのですが BOMというものがあるのですね。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

trim($b)で、printすると1桁なのにstrlenが4ですか。実際のtest.datの中身も間違いないですよねぇ・・。 test.datの中身をバイナリエディタで確認した方が早いかもしれません。ひょっとしてメモ帳でUTF保存してBOMが先頭に付いていませんか?>test.dat。先頭に改行を入れて $b = $FILE[1]; にしてみたらどうなりますか?

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.3

>$aは1だった var_dump() 辺りで確認してみたらどうだろう もしかしたら$aの中身は個数1の配列が入っているかもしれないね。 ↓こんな状態かもって話 $a = array('本来のデータ');

ajyak
質問者

補足

回答する事が遅くなりましてすみません。 var_dumpで確認した所、配列ではありませんでしたが 原因は他の回答で指摘のあったファイル形式に問題があった ようです。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

改行マークでしょうね。 print strlen($a); print strlen($b); とするとbの方が、1or2長いと思います こんなかんじでしょうか? <? $a = $_GET["a_data"]; $FILE = file("test.dat"); $b = $FILE[0]; $b = str_replace(Array("\n","\r"),"",$b); IF($a == $b) print("OK"); ?>

ajyak
質問者

補足

print strlen($a); print strlen($b); をやってみると$bが4となりました。 $aは1だったので、ここが違うのですね。 しかし、$b = str_replace(Array("\n","\r"),"",$b); をやってもこの数値が変わりません。 もっと詳しくデータ形式が分かるような関数がありませんでしょうか

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>$b = $FILE[0]; 一番ありそうなのは$bに改行が付いているハズ・・というくらいですが >ちなみに $a,$b共にtrim()で空白などを削除してもダメでした。   $b = trim($FILE[0]); でもダメでしたか?

ajyak
質問者

補足

$b = trim($FILE[0]); でも同じでした。 改行コードもない事を確認しましたが、どうしてでしょうか

関連するQ&A

  • 3っの条件式の書き方をお聞きします。

    複数条件の式の書き方をお聞きします。 A.B.C の3っの条件式です。 Aが空白のときtrue、falseを○、 Bが空白のときtrue、falseを△、 Cが空白のときtrue、falseをとします。 A B C D E F G 1○△=false:false:false=◇ 2○△=false:false:false=◇ 3○△=false:false:false=◇、 trueを1、falseを0とし、 これを DEF G 111:空白"" 110: 101:△ 011:○ 100:И 010:Е 001:Ш 000:◇ と表示したときの、 この場合のG 1.2.3の式を教えていただきたい。 式が長すぎてどうすれば良いのか分かりません。 A.B.C3っの条件式は、どう書くのでしょうか。 エ2010。

  • IF関数を教えてください

    いつもお世話になっています。 A1 B1 C1共に空白なら「空白」 A1+B1+C1が空白以外(数字)であれば「その値」を返すという関数にしたいのですが、今=IF(A1+B1+C1=0," ")にしましたが、数字の時にその値を返す式にできません。(FALSEになります) もしできましたら、解説付きで教えていただけませんでしょうか。 よろしくお願いします。

  • EXCEL IF関数

    EXCELのIF関数で「A1からA5が空白だったならば、空白を、空白じゃなかったらA1からA5の合計を求める」といったような式の設定はできますか? 「A1からA5の全てにデータが入れば合計を求める」または「A1からA5のどれかにデータが入れば合計を求める」というやり方はどうでしょう? 1つ目のように、範囲を論理式(条件)に用いることはできるのでしょうか?

  • ウインドウズ・エクセル2013でIF関数が不思議

    A1に情報と書きます。B1に評価と書きます。 A2には、何も入力しません。 A3には、=IF(A2="","",A2) という式を入れます。 B2には、=ISTEXT(A2)という式を入れます。 B3には、B2をコピーして、ペーストします。 その結果、B3の式は、=ISTEXT(A3)になります。 このようにすると、B2には、FALSEと出て、B3には、TRUEと出ます。 A2もA3も見た目には、空白なのに、B2、B3で評価が違うのはどう理解したらいいのでしょうか。 マクロを作っていたら、この問題で2時間苦しみました。解決策として、A2には空白は入れないこととし、空白にしたい時は0を入れることにしました。

  • EXCELでのIFの構文について

    EXCEL2002を使っています。IFの構文で長い式の条件を与えるとします。(式Aとします)例えば式Aの結果が0のときは空白を、そうでなければ式Aの結果を出したいのです。その場合=if(式A=0,"",式A)で結果は出せるのですが、式Aがダラダラ長くてFALSEの部分をなにか簡単なもので代用できないかお尋ねしたいのです。一度他のセルに式Aをおいて、そのセルを参照させれば、簡単な式にはできるのですが、できればダイレクトにやりたいのです。よろしくお願いします。

  • エクセルのIF文の質問

    お世話になります。 エクセルの条件分岐で、 ・値が0、もしくは空白のときは空白を表示、違ったら値を参照 ・一つ上の行と次の行の値が同じなら空白を表示、違ったら値を参照 という二つのIFを組み合わしたいのですが、どうにもうまくいきません。   A|B|C| 1|あ|い| | 2|あ|0 |う| 3| |0 |う| 例えばこんなデータなら、シート2にその結果を表示させたとして   A|B|C| 1|あ|い| | 2| | |う| 3| | | | こんな感じにしたいのです。 現在、 ・1行目に、空白か0なら空白を表示させる式を入力し IF(OR(A1="",A1=0),"",A1) ・2~データの終わりの行に、上と同じなら空白を表示させる式を入力しています。 IF(A1=A2,"",A2) でもこれをするとなぜかうまくいきません。 A2の値が空白だった時に0が表示してしまいます。 それに、自分の作った計算式もなんかスマートじゃない気がしてなりません。 もっと良い方法はないでしょうか?

  • IF関数

     また質問します。IF関数を使い、IF(ROUNDDOWN(A1,0=0,"0",ROUNDDO WN(A1,0),IF(A1="","",""))というう式を作ってみたのですが引数が  多すぎますとエラーが出てしまいます。  式の条件はA1が0なら0、A1がそれ以外なら切捨てた数字、A1が空白  なら空白というう条件にしたつもりなのですが上手くいきません。  この数式の間違っている所と、これ以外にいい算式があれば教えて  下さい。宜しくお願いします。

  • EXCEL 偽の場合はセルの内容を変えない

    IF関数を組み合わせて式を作りましたが、条件が合わないときはセルの内容を変えないで欲しいのです。方法がありますか? B2の式=IF($A$1>B1,A1*B1,そのまま)みたいな つまり、FALSEや空白を返すのではなく内容を変えないで欲しいのです 素人の質問ですみません。

  • 条件が不一致の場合の繰り返し処理

    以下のようなCSVがあります。 条件があったときにCSVの内容を表示するようにしているのですが 条件に合わなかったときの処理がわかりません。 以下のままですと「見つかりませんでした」と行数分(4回)表示されてしまいます。 これを一度だけにするにはどうすればよいのでしょうか? --data.csv-- 0,12,A 0,13,B 0,14,C 0,15,D <?php $Data = file("data.csv"); for($i = 0; $i < sizeof($Data); $i++){ $item = explode(",", $Data[$i]); if($item[0] == "0" and $item[1] == "11"){ print $item[3]; }else{ print "見つかりませんでした"; } } ?>

    • 締切済み
    • PHP
  • エクセルのIF文

    基本的な質問ですが、 エクセルのIF文で下記の条件式を教えてください。 A1が1ならばB1には普通と表示、2ならば当座、0ならば空白というIF文を作りたいのですが、どのように作れば良いのでしょうか? よろしくお願い致します。

専門家に質問してみよう