2012-02-18 11 views
26

'a yapıştırıyorum. Şu anda oynadığım 2 kod snippet'ım var, ama mantığın bunlardan birine yapışmasını sağlayamadım.php son karakterin bir '/' olup olmadığını kontrol etmiyorsa o zaman

Verilen bir dizenin sonunda bir '/' olup olmadığını, daha sonra eklemediğini görmeye çalışıyorum.

$path = '.';

if (substr($path, 0, -1) != '/') 
    $path .= '/'; 

ve

if (strrpos('/', $path) !== true) 
    $path .= '/'; 

sahip mesele im i $path eşit './ için yaparsanız o zaman çıktı .//

bu şekilde bu olsun olmasıdır snippet'idir nerede sorun yaşıyorum

if (!is_array($paths)) 
    $this->classPath[] = $paths; 
else 
    $this->classPath = $paths; 

foreach ($this->classPath as $path) { 

    if (strrpos('/', $path) !== true)// || substr_count($path, '/') >= 0) 
     $path = $path . '/'; 
    //else 
     //$this->classPath[] = $path; 
     //echo '0'; 
    $pathArr[] = $path; 
+0

hem kodları ile veya sadece ikinci biriyle bu sorunu var? ikinci birini kullanmakta ne anlamı var? Her ikisine de –

+0

. ve son dizgenin '/' her ikisi de son dize doğru yinelemeli mi algılamaya çalışıyorum? – Eli

+0

Sanırım strrpos ('/', $ yolu)! == 0 ' – knittl

cevap

122

Bunu göz ardı ediyor olabilirsiniz. substr() yöntemi mükemmel bir şekilde çalışacak olsa da, izleyen eğik çizgileri kaldırmak ve daha sonra bir tane eklemek için rtrim()'u kullanmak daha basit olabilir.

$path = rtrim($path, '/') . '/'; 

Dikkat: Bu, arkadaki çoklu eğik çizgileri kesecek. Böylece .//////, ./

+0

istediğin zaman substr 'kullanabilirsiniz. Evet haklısın – Eli

+0

Bu tam olarak benim düşüncem. Gerekirse sağa kısın ve bir eğik çizgi ekleyin. Ama neden düşüş var? –

+0

harika çalışıyor! – Eli

0

Eğer işlev yukarıda kullanmak istemiyorsanız o zaman

if (endsWith($path,'/') == false) 
{ 
    $path = $path."/"; 
} 

ve offcourse gibi kullanabilirsiniz blog post

tarafından

function endsWith($FullStr, $needle) 
    { 
     $StrLen = strlen($needle); 
     $FullStrEnd = substr($FullStr, strlen($FullStr) - $StrLen); 
     return $FullStrEnd == $needle; 
    } 

alınan bu fonksiyonu kullanmayı deneyebilirsiniz siplify şeyler o zaman kullandığınız yolu değiştirmelisiniz substr

Son char elde etmek için doğru yolu substr($path,-1)

+0

@Col. S .: hehehe – Eli

+2

ayağınız iyi kardeşim! Fonksiyon sadece substr fonksiyonunu kolaylaştırır, böylece 'substr' mantığını yeniden düşünmenize gerek kalmaz. Sadece senin noktanı kanıtlamak için o kadar kaba olamazsın. Yukarıdaki bir seçenek. Sen her zaman –

1

Yalnızca yanlış kullanıyorsunuz.

sadece negatif kullanmak gelmiş son karakteri ofset almak için:

  • ayıklama
  • dokümantasyon okuma: substr($path,-1)

    Kodunuz programlama için gerekli 2 temel şeyler, yoksun.

Hata ayıklama, değişkenlerinizi yankılamak kadar basittir.
echoing substr($path, 0, -1) ile kodunuzun bir miktar yanlış olduğunu fark edebilirsiniz ve documentation numaralı telefonu okuyarak doğru kullanımı görebilirsiniz.

+0

hata ayıklama aşamasını geçtim, muhtemelen yığın akışındaki insanların% 90'ı, mantığımın eksik olduğu konusunda ikinci bir görüş almak için buraya geldim. – Eli

+10

Biri basitçe hata ayıklama aşamasını "geçmez" :) –

+4

"Geçmişim" nedir? heck "hata ayıklama aşaması" nedir? –

2

Çözümümün: hatta basit ve pencereler geliştiriciler için eğik çizgi, kullanışlı geri dönüştürür:

function fixpath($p) { 
    $p=str_replace('\\','/',trim($p)); 
    return (substr($p,-1)!='/') ? $p.='/' : $p; 
} 
İlgili konular