Respostas:
Muito simplesmente:
$id = substr($url, strrpos($url, '/') + 1);
strrpos obtém a posição da última ocorrência da barra; substr retorna tudo após essa posição.
Conforme mencionado por redanimalwar, se não houver nenhuma barra, isso não funciona corretamente, pois strrpos
retorna false. Aqui está uma versão mais robusta:
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
não está recebendo mais votos positivos, funciona perfeitamente bem para mim.
$str = basename($url);
Você pode explodir com base em "/" e retornar a última entrada:
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
Isso se baseia em explodir a corda, algo que não é necessário se você sabe que o padrão da própria corda não mudará tão cedo. Você pode, alternativamente, usar uma expressão regular para localizar esse valor no final da string:
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
sempre parece mais sobrecarga para mim, embora eu nunca tenha cronometrado para ver quão rápido é.
Você pode usar substr
e strrchr
:
$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str; // Output: 1234567
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);
Dois one liners - suspeito que o primeiro seja mais rápido, mas o segundo é mais bonito e diferente end()
e array_pop()
, você pode passar o resultado de uma função diretamente para current()
sem gerar qualquer aviso ou aviso, uma vez que não move o ponteiro ou altera o array.
$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)));
end()
desta forma no php 5.4+ e superior irá gerar um aviso. De acordo com a documentação: " você deve passar uma variável real e não uma função que retorna um array porque apenas variáveis reais podem ser passadas por referência. ".
Aqui está uma bela função dinâmica que escrevi para remover a última parte do url ou do caminho.
/**
* remove the last directories
*
* @param $path the path
* @param $level number of directories to remove
*
* @return string
*/
private function 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('/')
útil, conforme encontrado nesta biblioteca independente .