У меня есть два фрагмента кода, с которыми я играл, но, похоже, не может заставить логику придерживаться любой из них.
Я пытаюсь увидеть, имеет ли данная строка в конце '/', если не добавить ее.
$path = '.';
if (substr($path, 0, -1) != '/') $path .= '/';
а также
if (strrpos('/', $path) !== true) $path .= '/';
проблема im заключается в том, что если я делаю $path
равным './
то я получаю это как вывод .//
это фрагмент того, где у меня проблема
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;
Вы можете переусердствовать. Хотя метод substr()
будет работать отлично, может быть проще использовать rtrim()
чтобы удалить любые завершающие косые черты, а затем добавить один.
$path = rtrim($path, '/') . '/';
Внимание: это позволит обрезать несколько косых черт вперед. поэтому .//////
становится ./
Вы просто используете substr неправильно.
Чтобы получить последний символ, вы просто используете отрицательное смещение: substr($path,-1)
В вашем коде не хватает двух основных вещей , необходимых для программирования:
Отладка так же просто, как просто повторять ваши переменные.
по echoing substr($path, 0, -1)
вы можете осознать, что ваш код несколько ошибочен, и, читая документацию, вы можете увидеть правильное использование.
Мое решение: простой и даже конвертирующий обратные косые черты, полезные для разработчиков Windows:
function fixpath($p) { $p=str_replace('\\','/',trim($p)); return (substr($p,-1)!='/') ? $p.='/' : $p; }
вы можете попытаться использовать эту функцию
function endsWith($FullStr, $needle) { $StrLen = strlen($needle); $FullStrEnd = substr($FullStr, strlen($FullStr) - $StrLen); return $FullStrEnd == $needle; }
взято из сообщения в блоге
затем используйте его как
if (endsWith($path,'/') == false) { $path = $path."/"; }
и если вы не хотите использовать вышеприведенную функцию для умножения вещей, тогда вы должны изменить способ использования substr
правильный способ получить последний символ – substr($path,-1)