簡體   English   中英

使用php strpos函數時,為什么會得到此意外結果?

[英]Why am I getting this unexpected result when using php strpos function?

我正在嘗試使用php的strpos函數在另一個字符串中搜索一個字符串。 我執行了2種不同的搜索,均包含冒號。 我看到的唯一區別是冒號是出現在“針”的開始還是結尾。

我的代碼如下:

<?php
$string = 'abc:def';
echo strpos($string,'abc:') ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') ? ':def true' : ':def false'; 

我得到的輸出是abc: false / :def true 我不明白為什么,希望有人能向我解釋。 您可以在此處看到一個有效的示例:

http://ideone.com/MyEn5d

Strpos返回給定字符串(針)在其他字符串(堆棧)中的位置。 請參見reference- strpos 正確使用strpos(請注意,它是!==而不是!= ,因為我們還要檢查類型):

$string = 'abc:def';
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false'; 

總結起來,strpos返回的數值是一個位置(例如0或5),或者在找不到該值時返回false

至於為什么你的片段

echo strpos($string,':def') ? ':def true' : ':def false'; 

返回true -在PHP中的每非零整數被視為true ,如果你是比較它作為布爾,和你strpos返回的值大於零(可能是“4”在這個例子中),因此它被認為是true 有關更多詳細信息,請參見此處

根據文檔

strpos()

在干草堆字符串中找到第一次出現針的數字位置。 返回相對於干草堆字符串起點的針所在位置(與偏移量無關)。 另請注意,字符串位置從0開始,而不是1。

所以

strpos($string,'abc:') 

返回0。因此它在回顯:

abc: false

在您的情況下strpos()返回true/false結果,因此您需要根據返回結果進行檢查try

echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false'; 

您需要使用布爾比較,並且僅當沒有匹配項時它才返回false

$string = 'abc:def';
echo strpos($string,'abc:') !== false ? 'abc: true' : 'abc: false';
echo ' / ';
echo strpos($string,':def') !== false ? ':def true' : ':def false'; 

strpos($string, "abc") will return (int) 0
(int) 0 !== false ---> true statement
(int) 0 === true ---> false statement 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM