0

これを書く最短の方法は何でしょうか?

if(strpos($haystack, $needle)!==false){
    $len = strpos($haystack, $needle)+strlen($needle);
}else{
    $len = 0;
}

変数のチェックと設定を同時に行うショートカットをどこかで見たのを覚えています。

4

6 に答える 6

5
$len = 0;
if(($pos = strpos($haystack, $needle)) !== false) {
    $len = $pos + strlen($needle);
}

?:たとえそれが短くても、三項演算子に反対することをお勧めします。

于 2010-04-12T11:27:42.127 に答える
2
$len = strpos($haystack, $needle);
$len = ($len !== false) ? $len + strlen($needle) : 0;
于 2010-04-12T11:28:31.047 に答える
1
$len=strpos($haystack, $needle);
if($len !== FALSE) {
    $len +=  strlen($needle);
}

そして、私の意見では、三項演算子は可読性に大きな影響を与えます。

于 2010-04-12T11:27:25.573 に答える
0

別のアプローチ:

$len = strlen(preg_replace('/(.*?'.preg_quote($needle,'/').')?.*/', '$1', $haystack));

おそらく遅く、より多くのメモリを消費しますが、タイピングの必要性は少なくなります。したがって、実際にショートカットであるかどうかは、定義によって異なります。三項演算子と評価条件内の代入にアレルギーがある場合は、有効なオプションが提示されます。

あなたもできる

$len = preg_match('/'.preg_quote($needle,'/').'()/', $haystack, $m, PREG_OFFSET_CAPTURE)? $m[1][1] : 0

ただし、 preg_ 関数を使用して固定文字列を検索するのはリソースの無駄遣いです。

于 2010-04-12T12:38:13.910 に答える
0

これは10 項演算子と呼ばれ、次のように使用できます。

$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;

ただし、一部の式が非常に読みにくくなる可能性があるため、注意して使用する必要があります。

于 2010-04-12T11:25:49.447 に答える
0
$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;

三項演算も参照してください。

于 2010-04-12T11:26:00.897 に答える