2011-08-03 74 views
2
function StringCount($searchstring, $findstring) 
     { 
      return (strpos($searchstring, $findstring) === false ? 0 : count(split($findstring, $searchstring)) - 1); 
     } 

它返回字符串中子串的ocourances數,但爲什麼不只是使用count?解釋此函數的語法

這是什麼意思=== false ? 0 : 我的意思是這是怎麼稱呼其不是如果或情況下有辦法調用這種類型的寫作?

回答

0

因爲strpos返回布爾值FALSE,但也可能返回一個非布爾值,其值爲FALSE,如0或「」。

一個很好的例子是,StringCount(「計算器」,「堆」)將返回0,如果

function StringCount($searchstring, $findstring) 
{ 
    return (strpos($searchstring, $findstring) == false ? 0 : count(split($findstring, $searchstring)) - 1); 
} 
1

這是一種三元運算符的(意味着它需要3個操作數),並且是一個短的形式if then else從句。

if(a) 
{ 
    b 
} 
else 
{ 
    c 
} 

所以它在本質上是這樣的:

a ? b : c可以作爲擴展

$strPos; 
if (($searchstring, $findstring) === false) 
{ 
    $strPos=0 
} 
else 
{ 
    $strPos=count(split($findstring, $searchstring)) 
} 

返回strpos($ strPos-1);

+0

如果包含在一個函數中,這個解釋更完整,因爲整個事情要麼返回b或c,也稱爲三次鉤子。 –

+1

1.「三元」。事實上,你會經常聽到這個叫做*三元操作符,因爲C'ish語言中很少/沒有其他常見操作符。 – cHao

+0

'x? y:z'和'if(x){y} else {y}'是不完全一樣的東西。是的,當用這種方式解釋時,初學者更容易掌握,但不是這樣;-) – VolkerK

0

這是一個ternary condition

如果strpos($searchstring, $findstring)是假的使用substr_count()http://www.php.net/manual/en/function.substr-count.php),然後0,否則count(split($findstring, $searchstring)) - 1

所以如果$findstring是不是在$searchstring找到,返回0

的原因,你需要3 =對於虛假陳述是strpos返回,其中針在草堆中發現的整數。購買使用===你得到布爾值。