Это обрезает первый символ, если косой черты нет вообще.
redanimalwar
@redanimalwar Я добавил еще одно решение
DisgruntledGoat 02
9
Мне интересно, почему $str = basename($url)не набирает больше голосов, у меня отлично работает.
redanimalwar
2
@redanimalwar (1) basename предназначено для путей к файлам, а не для URL-адресов - я думаю, что он всегда будет возвращать один и тот же результат, но могут быть крайние случаи, такие как обратная косая черта; (2) basename работает только для косых черт, тогда как мой ответ можно легко изменить, если кто-то другой хочет сделать то же самое с другим символом.
Это основано на раздувании струны на части, в этом нет необходимости, если вы знаете, что образец самой струны не скоро изменится. В качестве альтернативы вы можете использовать регулярное выражение, чтобы найти это значение в конце строки:
explodeМне всегда кажется, что это слишком накладно, хотя я никогда не рассчитывал время, чтобы увидеть, насколько он быстр.
DisgruntledGoat 01
Похоже, что explode () работает немного медленнее. В 10k экземплярах это время, необходимое для обоих. substr () первый: 0,013657 / 0,045038
Сэмпсон,
Может быть и медленнее, но здесь я предпочитаю взрыв. В частности, если URL-адрес не содержит «/», +1 в ответе strrpos создает беспорядок, который можно преодолеть.
Ноам
1
Пример бросает уведомление и обязательно должен быть переработан.
в php7 Возвращения заметить: PHP Notice: Only variables should be passed by reference.
billynoah
0
Два одинарных лайнера - я подозреваю, что первый быстрее, но второй красивее и непохож, end()и array_pop()вы можете передать результат функции напрямую, current()не генерируя никаких уведомлений или предупреждений, поскольку он не перемещает указатель и не изменяет массив.
$var ='http://www.vimeo.com/1234567';// VERSION 1 - one liner simmilar to DisgruntledGoat's answer above
echo substr($a,(strrpos($var,'/')!==false? strrpos($var,'/')+1:0));// VERSION 2 - explode, reverse the array, get the first index.
echo current(array_reverse(explode('/',$var)));
@redburn, при использовании end()этого способа в php 5.4+ и выше будет выведено уведомление. Согласно документации: « вы должны передать ему реальную переменную, а не функцию, возвращающую массив, потому что только фактические переменные могут передаваться по ссылке ».
Биллиноа,
-1
Вот красивая динамическая функция, которую я написал для удаления последней части URL-адреса или пути.
/**
* remove the last directories
*
* @param $path the path
* @param $level number of directories to remove
*
* @return string
*/privatefunction removeLastDir($path, $level){if(is_int($level)&& $level >0){
$path = preg_replace('#\/[^/]*$#','', $path);return $this->removeLastDir($path,(int) $level -1);}return $path;}
s($str)->afterLast('/')
полезные сведения, найденные в этой автономной библиотеке .Ответы:
Очень просто:
strrpos получает позицию последнего появления косой черты; substr возвращает все, что находится после этой позиции.
Как упоминалось redanimalwar, если нет косой черты, это работает неправильно, так как
strrpos
возвращает false. Вот более надежная версия:источник
$str = basename($url)
не набирает больше голосов, у меня отлично работает.источник
Вы можете взорвать "/" и вернуть последнюю запись:
Это основано на раздувании струны на части, в этом нет необходимости, если вы знаете, что образец самой струны не скоро изменится. В качестве альтернативы вы можете использовать регулярное выражение, чтобы найти это значение в конце строки:
источник
explode
Мне всегда кажется, что это слишком накладно, хотя я никогда не рассчитывал время, чтобы увидеть, насколько он быстр.Вы можете использовать
substr
иstrrchr
:источник
источник
array_pop(explode("/", "http://vimeo.com/1234567"));
вернет последний элемент URL-адреса примераисточник
PHP Notice: Only variables should be passed by reference
.Два одинарных лайнера - я подозреваю, что первый быстрее, но второй красивее и непохож,
end()
иarray_pop()
вы можете передать результат функции напрямую,current()
не генерируя никаких уведомлений или предупреждений, поскольку он не перемещает указатель и не изменяет массив.источник
end()
этого способа в php 5.4+ и выше будет выведено уведомление. Согласно документации: « вы должны передать ему реальную переменную, а не функцию, возвращающую массив, потому что только фактические переменные могут передаваться по ссылке ».Вот красивая динамическая функция, которую я написал для удаления последней части URL-адреса или пути.
источник