php, если последний символ является «/», если нет,

У меня есть два фрагмента кода, с которыми я играл, но, похоже, не может заставить логику придерживаться любой из них.

Я пытаюсь увидеть, имеет ли данная строка в конце '/', если не добавить ее.

$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)