今日はじめてPHPを触ったので、的外れな事を言っていたら指摘してください。
ある文字列に"テスト"という文字列が含まれていた場合処理1をしたいのですが、
リファレンスを読んでstrposを使うことまではわかりました。
そこで、以下のスクリプトを作成しました。
if(strpos($txtContents, "テスト") >= 0){
処理1;
}else{
処理2;
}
これだと、$txtContentsに「テスト」が含まれない場合、処理1に
流れてしまいます。
「テスト」が含まれるときも処理1に流れます。
どこが間違っているか教えてもらえますか?
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
出過ぎたマネをして申し訳ありません。
misschoiceさんには失礼かなと思いましたが
やはり修正しておいた方が良いと思い
投稿させていただきましたm(__)m
PHPはまだ文法が流動的な言語なので
新しい表記法がどんどん追加されてます。
困ったものです。
boolean型と他の型は
PHP4では明確に区別されています。
PHPではif等の制御構文は
条件判定をboolean型として行いますので
他の型は強制的にキャストされます。
ですので「0」はboolean型である
「FALSE」に変換されてしまうのです。
多くの関数はエラーや値が取得出来なかった場合
「FALSE」を返すようになっています。
大抵の関数は普通に判定して問題無いのですが
検索関数等の
値として「0」や「""」が返ってくる可能性があるものは
この表記法は結構出てくると思います。
PHPのマニュアルへのURLを記しておきます。
ざっと目を通しておくと良いでしょう。
参考URL:http://php.netmonic.com/manual/ja/function.strpo …
再度の回答ありがとうございます。
今回のはなんとかできそうなのですが、
0や""が返ってくる場合にfalseの0に変換されてしまうと、
たとえば返値が=0だった場合、という処理の場合、どう記述すればいいのでしょうか。
もしおわかりでしたら教えていただけると嬉しいです。
マニュアルも読んでいるのですが、小さい事につまづくことが多いです~(T_T)
No.3
- 回答日時:
不完全な回答ですいませんでした。
brickさん、修正回答ありがとうございました。
少し調べてみました。
比較演算子「===」や「!==」はbricksさんのおっしゃるとおり型を考慮した演算子で
PHP4から追加されたもののようです。
処理1と処理2の順を変えたくない場合、「!==」を使用するといいのではないでしょうか。
true、falseはブール型ですがそれぞれ実体は1,0と等価だと思います。
(C言語などの表意定数と同じ値にしたのだと思います)
strposの返り値は通常(?)int型ですが、
インデックス0で見つかったとき→int型の0
見つからなかったとき→bool型の0(すなわちfalse)
を返すということだと思います。
そのまま単純に「0」で判定すると両方とも引っ掛かってしまうのでしょう。
関数の戻りの型が変わるというパターンは私は初めてで、
うまく説明できてないかもしれません。
わざわざ調べていただきどうもありがとうございます。
なるほど、0が含まれてしまうのはfalseの0が返っていたからなんですね。
とすると、phpの関数は、だいたいこういった使い方をするのでしょうか。
みなさんどうやってプログラミングしているのか不思議です。
今日はじめてphpを触ったので、まだわからないことだらけですので、
自分でも色々と調べてみますね。
もう少し、情報がいただけるかもしれないのでしばらく締め切らないでおきます。
どうもありがとうございました。
No.2
- 回答日時:
#1の方の修正です。
型の一致条件も加えないと
「0」と「false」が同じとみなされてしまいますので
if(strpos($txtContents, "テスト") === false){
処理2;
}else {
処理1;
}
としておいた方が良いでしょう。
この回答への補足
ありがとうございます。
できました。
でも、なぜ>=ではだめなんでしょうか?
>=0だと、falseの場合も含まれてしまいます。
そして、=== ←これってどういう意味なんでしょう?
逆もありかな?と思って>==0とやったらおこられました。
この順番でもできないことはないのですが、やはり処理1、処理2の
順に記述したいので、原因などわかりましたらまた教えてください。
No.1
- 回答日時:
strposは使ったことがないので予想ですが...
strpos関数は見つからなかったときに「false」を返すようです。
そこで、ちょっと書き換えて、
if(strpos($txtContents, "テスト") == false){
処理2;
}else {
処理1;
}
としてみたらどうですか?
この回答への補足
ありがとうございます。
#NO2さんの回答とあわせてできました。
でも、なぜ>=ではだめなんでしょうか?
>=0だと、falseの場合も含まれてしまいます。
この順番でもできないことはないのですが、やはり処理1、処理2の
順に記述したいので、原因などわかりましたらまた教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
◆バックエンド処理の終了を知り...
-
タイムアウト処理?となる
-
Smartyにて、文字検索
-
3の倍数の和
-
PHPが処理を途中でやめる。原因...
-
「@$変数」の「@の意味は?」
-
フォントの色を変えるには?
-
youtubeに音声のみのmp4ファイ...
-
header(Location:~)で$_SESS...
-
【PHP】命令は記述順に処理...
-
ヒアドキュメントの中で演算子...
-
.phpと.incファイルの違いはな...
-
Subversionのリポジトリの削除
-
makefile でファイルをコピーす...
-
VBSの「MsgBox」について
-
2つの画像ファイルが異なるファ...
-
これは例外処理でしょうか?
-
ZendFramework 環境設定
-
PythonのTkinter詳しい方へ。画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
Cronで同じ処理を複数同時に実...
-
phpの処理中に画面表示ををする...
-
3の倍数の和
-
インスタンス化に伴うメモリ消...
-
関数の前についている「@」の意...
-
プログラム内で処理中断後も継...
-
web画面から呼び出したphp処理...
-
PHPで文字列(日本語)の比較
-
includeしたファイルに変数を持...
-
PHPのSmartyについて質問です。...
-
submitボタンを自動クリック
-
Smartyにて、文字検索
-
チェックボックスをビット演算...
-
タイムアウト時に次の処理へ移...
-
Linuxサーバに移行とphpexcel出力
-
csvファイルの読込みとソート
-
VBAからPHPを実行(キック)したい
-
PHPで偶数と奇数を判断するには
おすすめ情報