[英]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
。 我不明白為什么,希望有人能向我解釋。 您可以在此處看到一個有效的示例:
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.