Подтвердить что ты не робот

Php, если последний символ является "/", если нет,

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

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

$path = '.';

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

и

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

проблема im 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;
4b9b3361

Ответ 1

Вы можете переусердствовать. В то время как метод substr() будет работать отлично, может быть проще использовать rtrim(), чтобы удалить любые завершающие косые черты, а затем добавить их.

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

Внимание: это позволит обрезать несколько косых черт вперед. поэтому .////// становится ./

Ответ 2

Вы просто используете substr неправильно.

Чтобы получить последний символ, вы просто используете отрицательное смещение: substr($path,-1)

В вашем коде не хватает 2 основных вещей, необходимых для программирования:

  • Отладка
  • документация.

Отладка так же просто, как просто повторять ваши переменные.
повторив substr($path, 0, -1), вы можете понять, что ваш код несколько ошибочен, и, прочитав документацию, вы можете увидеть правильное использование.

Ответ 3

Мое решение: простой и даже конвертирующий обратные косые черты, полезные для разработчиков Windows:

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

Ответ 4

вы можете попробовать использовать эту функцию

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

взято из сообщение в блоге

затем используйте его, как

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

и offcourse, если вы не хотите использовать вышеприведенную функцию для умножения вещей, тогда вы должны изменить способ использования substr

правильный способ получить последний char - substr($path,-1)