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

文字列に部分文字列の数を返しますが、単にカウントを使用するだけではありませんか?この関数の構文を説明してください

どういう意味ですか?=== false ? 0 : 私はこれをnotまたはcaseと呼んでいますが、このタイプの書き込みを呼び出す方法は何ですか?

答えて

0

strposはブールFALSEを返しますが、FALSEと評価されるブール値でない値も返します(0や ""など)。

良い例は

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

これは三項演算子の種類(意味が3つのオペランドをとる)であり、短い形式である場合StringCount(「StackOverflowの」、「スタック」)は0を返すことですif then else節のうちの1つ。だから、本質的に、それはこのようなものである

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を返すか、またはtrinaryフックとも呼ばれるからです。 –

+1

1. "三元"。実際には、C'ish言語では他の共通言語がほとんどない/全くないので、* 3進演算子と呼ばれるこれを頻繁に聞きます。 – cHao

+0

'x? y:z'と 'if(x){y} else {y}'はまったく同じものではありません。はい、これを説明すると初心者の方が理解しやすいですが、同じではありません;-) – VolkerK

0

それは、その後、ternary condition

です0、else count(split($findstring, $searchstring)) - 1

$findstring$searchstringに見つからないのであれば、あなたはその虚偽の陳述のための3 =を必要と返す0

理由はstrpos戻り、針が干し草の山で発見された場所の整数です。 ===を使って購入すると、ブール値が得られます。

関連する問題