php checking if the last character is a '/' if not then tack it on
I have these 2 snippets of code that I have been playing with, but can't seem to get the logic to stick in either of them.
I am trying to see if a given string has a '/' at the end, if not then add it.
$path = '.';
if (substr($path, 0, -1) != '/')
$path .= '/';
and
if (strrpos('/', $path) !== true)
$path .= '/';
the issue im having is that if i make $path
equal to './
then I get this as the output .//
this is the snippet of where i am having the issue
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;
You might be overthinking it. While the substr()
method will work perfectly it might be simpler to use rtrim()
to remove any trailing slashes and then add one on.
$path = rtrim($path, '/') . '/';
Caution: this will trim multiple trailing forward slashes. so .//////
becomes ./
My solution: simple and even converts back slashes, useful for windows developers:
function fixpath($p) {
$p=str_replace('\\','/',trim($p));
return (substr($p,-1)!='/') ? $p.='/' : $p;
}
you can try to use this function
function endsWith($FullStr, $needle)
{
$StrLen = strlen($needle);
$FullStrEnd = substr($FullStr, strlen($FullStr) - $StrLen);
return $FullStrEnd == $needle;
}
taken from my blog post
then use it like
if (endsWith($path,'/') == false)
{
$path = $path."/";
}
and offcourse if you do not want to use above function to siplify things then you should change the way you are using substr
correct way to get last char is substr($path,-1)