2012-02-18 11 views
26

Ho questi 2 frammenti di codice con cui ho giocato, ma non riesco a ottenere la logica da inserire in nessuno dei due.php che controlla se l'ultimo carattere è un '/' se non lo affronta su

Sto provando a vedere se una determinata stringa ha un '/' alla fine, se non è così, aggiungila.

$path = '.';

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

e

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

l'im problema avendo è che se faccio $path uguale './ allora ottengo questo come uscita .//

questo è il frammento di dove sto avendo il problema

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

avete quel problema con entrambi i codici o soltanto con quest'ultimo? che senso ha usare l'ultima? –

+0

per entrambi. e stavo cercando di rilevare se l'ultima stringa è '/' entrambi dovrebbero iterare dall'ultima stringa, giusto? – Eli

+0

Penso che tu voglia 'strrpos ('/', $ path)! == 0' – knittl

risposta

122

Potrebbe essere troppo pensarlo. Mentre il metodo substr() funzionerà perfettamente, potrebbe essere più semplice utilizzare rtrim() per rimuovere qualsiasi barra finale e aggiungerne una.

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

Attenzione: questo eliminerà più barre in avanti. quindi .////// diventa ./

+0

sì hai ragione – Eli

+0

Questo è esattamente quello che pensavo. tagliare il giusto se necessario e aggiungere una barra. Ma perché il downvote? –

+0

funziona alla grande !!!! – Eli

0

si può provare a utilizzare questa funzione

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

tratto da da blog post

poi usarlo come

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

e offcourse se non si desidera utilizzare sopra la funzione di siplifica le cose quindi dovresti cambiare il modo in cui stai usando il substr

modo corretto per ottenere l'ultimo carattere è substr($path,-1)

+0

@Col. S .: hehehe – Eli

+2

il tuo piede è bravo fratello! La funzione semplifica semplicemente la funzione 'substr' in modo che non sia necessario ripensare la logica per' substr'. Solo per dimostrare il tuo punto non puoi essere così maleducato. quanto sopra è un'opzione. Puoi sempre usare 'substr' quando vuoi –

1

Si sta semplicemente utilizzando il sub sbagliato.

Per ottenere l'ultimo carattere che avete appena usare negativo offset: substr($path,-1)

Il codice manca 2 cose fondamentali, indispensabili per la programmazione:

  • debug
  • lettura della documentazione.

Il debugging è semplice come l'eco delle variabili.
echo substr($path, 0, -1) è possibile rendersi conto che il codice è un po 'errato e leggendo documentation è possibile vedere l'utilizzo corretto.

+0

in passato la fase di debug, come probabilmente il 90% delle persone sullo stackoverflow, sono venuta qui in cerca di una seconda opinione su come manca la mia logica. – Eli

+10

Uno non "passa" semplicemente la fase di debug :) –

+4

"sono passato" cosa? che diamine è "fase di debugging"? –

2

La mia soluzione: semplice e anche riconverte barre, utile per gli sviluppatori di Windows:

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