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.