これを書く最短の方法は何でしょうか?
if(strpos($haystack, $needle)!==false){
$len = strpos($haystack, $needle)+strlen($needle);
}else{
$len = 0;
}
変数のチェックと設定を同時に行うショートカットをどこかで見たのを覚えています。
$len = 0;
if(($pos = strpos($haystack, $needle)) !== false) {
$len = $pos + strlen($needle);
}
?:
たとえそれが短くても、三項演算子に反対することをお勧めします。
$len = strpos($haystack, $needle);
$len = ($len !== false) ? $len + strlen($needle) : 0;
$len=strpos($haystack, $needle);
if($len !== FALSE) {
$len += strlen($needle);
}
そして、私の意見では、三項演算子は可読性に大きな影響を与えます。
別のアプローチ:
$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_ 関数を使用して固定文字列を検索するのはリソースの無駄遣いです。
これは10 項演算子と呼ばれ、次のように使用できます。
$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;
ただし、一部の式が非常に読みにくくなる可能性があるため、注意して使用する必要があります。
$len = strpos($haystack, $needle) ? strpos($haystack, $needle)+strlen($needle) : 0;
三項演算も参照してください。