PHP çıkarma substrine.

7 Cevap php

Ben bir alt ayıklamak çalışıyorum. PHP bunu yaparken biraz yardıma ihtiyacım var.

İşte ben ile çalışıyorum bazı örnek dizeleri ve gereken sonuçlar şunlardır:

home/cat1/subcat2 => home

test/cat2 => test

startpage => startpage

Ben ilk / kadar dize almak istiyorum, ama hiç / varsa, bütün dize olsun.

Denedim,

substr($mystring, 0, strpos($mystring, '/'))

Ben bunu söylüyor düşünüyorum - / konumunu almak ve ardından that pozisyondan pozisyona 0 dan altdize olsun.

Ben deyimi çok büyük yapmadan, hiçbir / olduğu davayı nasıl işleneceğini bilmiyorum.

PHP ifadesi çok karmaşık yapmadan de bu davayı işlemek için bir yolu var mı?

7 Cevap

Ne bu konuda:

substr($mystring.'/', 0, strpos($mystring, '/'))

En az bir ;) olduğundan emin olabilirsiniz sadece MyString sonuna bir '/' eklemek

PHP 5.3 fonksiyonu strstr () bu işi yapmalıyım .. Üçüncü parametre ancak doğru ayarlanması gerekir ..

Eğer 5.3 kullanıyorsanız değilseniz Ama, sonra aşağıdaki işlevi doğru çalışması gerekir:

function strbstr( $str, $char, $start=0 ){
    if ( isset($str[ $start ]) && $str[$start]!=$char ){
        return $str[$start].strbstr( $str, $char, $start+1 );
    }
}

Ben olsa test değil, ama bu sadece iyi çalışması gerekir .. Ve de oldukça hızlı

Ben bu işe gerektiğini düşünüyorum?

substr($mystring, 0, (($pos = (strpos($mystring, '/') !== false)) ? $pos : strlen($mystring)));

current üzerine explode sürecini kolaylaştırmak olacaktır kullanma.

 $str = current(explode("/", $str, 2));

neden kullanmayalım:

function getwhatiwant($s)
{
    $delimiter='/';
    $x=strstr($s,$delimiter,true);
    return ($x?$x:$s);
}

OR:

   function getwhatiwant($s)
   {
       $delimiter='/';
       $t=explode($delimiter, $s);
       return ($t[1]?$t[0]:$s);
   }

Böyle bir regex kullanarak deneyebilirsiniz:

$ S = preg_replace ('| / * |.','', $ S);

bazen, regex olsa yavaş, bu yüzden performans sorunu ise, bu düzgün kriter emin olun ve sizin için daha uygun ise alt dizelerin bir diğer alternatif kullanabilirsiniz.