php: Bu yazı için kısayol?

5 Cevap php

bu ne yazmak için kısa yolu olurdu?

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

Ben teslim ve aynı zamanda bir değişken bir yerde bunun için bazı kısayolu gördüğümü hatırlıyorum.

5 Cevap

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

Ben daha kısa olsa bile, üçlü ?: operatör karşı tavsiye ederim.

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

ve, benim görüşüme göre, üçlü operatör okunabilirliği üzerinde korkunç bir etkisi olduğunu.

Bu tenary operator denir ve bu gibi kullanılabilir:

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

Okumak için bazı ifadeler oldukça zor yapabilirsiniz çünkü, ancak dikkatli kullanmak gerekir.

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

Ayrıca bakınız Ternary Operation.

Farklı bir yaklaşım:

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

Muhtemelen daha yavaş ve yoğun bellek daha, ama daha az yazmaya gerek yoktur. Bir kısayol tanımına bağlıdır aslında olsun veya olmasın. Bu değerlendirme koşulları içinde üçlü operatörler ve atama alerjisi eğer geçerli bir seçenek mevcut yok.

Ayrıca yapabilirdi

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

yine sabit dizeler aramak için preg_ fonksiyonlarını kullanarak edilecek kaynaklara biraz savurgan olsa.