回答:
非常に簡単:
$id = substr($url, strrpos($url, '/') + 1);
strrposは、最後に出現したスラッシュの位置を取得します。substrは、その位置以降のすべてを返します。
redanimalwarが述べたように、スラッシュがない場合strrpos
はfalseを返すため、これは正しく動作しません。これはより堅牢なバージョンです。
$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);
$str = basename($url)
以上の投票が得られないのか、疑問に思っています。
$str = basename($url);
「/」に基づいて爆発し、最後のエントリを返すことができます。
print end( explode( "/", "http://www.vimeo.com/1234567" ) );
これは弦をばらばらにすることに基づいており、弦自体のパターンがすぐには変化しないことがわかっている場合は不要です。または、正規表現を使用して、その値を文字列の末尾に配置することもできます。
$url = "http://www.vimeo.com/1234567";
if ( preg_match( "/\d+$/", $url, $matches ) ) {
print $matches[0];
}
explode
私にとっては常にオーバーヘッドのように思えますが、それがどれほど速いかを確認するために時間を計ったことはありません。
あなたは使用することができますsubstr
と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);
array_pop(explode("/", "http://vimeo.com/1234567"));
サンプルURLの最後の要素を返します
PHP Notice: Only variables should be passed by reference
。
2つの1ライナー-最初の方が速いend()
とarray_pop()
思いますが、2番目の方がきれいです。これとは異なり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)));
end()
php 5.4以降でこの方法を使用すると、通知がスローされます。ドキュメントによると、「実際の変数のみが参照で渡される可能性があるため、配列を返す関数ではなく、実際の変数を渡す必要があります。」
これは、URLまたはパスの最後の部分を削除するために私が書いた美しい動的関数です。
/**
* 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('/')
にあるように、役立つ場合があります。