ฉันต้องการรับอักขระหลังสุดท้าย / ใน url เช่น http://www.vimeo.com/1234567
ฉันจะทำอย่างไรกับ php?
ฉันต้องการรับอักขระหลังสุดท้าย / ใน url เช่น http://www.vimeo.com/1234567
ฉันจะทำอย่างไรกับ php?
คำตอบ:
ง่ายมาก:
$id = substr($url, strrpos($url, '/') + 1);
strrposได้รับตำแหน่งของการเกิดครั้งสุดท้ายของสแลช substrส่งคืนทุกอย่างหลังจากตำแหน่งนั้น
ดังที่กล่าวไว้โดย redanimalwar หากไม่มีเครื่องหมายทับสิ่งนี้ทำงานไม่ถูกต้องเนื่องจากstrrpos
ส่งคืนเท็จ นี่คือเวอร์ชันที่มีประสิทธิภาพมากขึ้น:
$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
ดูเหมือนว่าจะมีค่าใช้จ่ายมากกว่าสำหรับฉันเสมอแม้ว่าฉันจะไม่เคยจับเวลาเพื่อดูว่ามันเร็วแค่ไหน
$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
ผลตอบแทนที่ทราบ:
Two one liners - ฉันสงสัยว่าอันแรกเร็วกว่า แต่อันที่สองสวยกว่าและไม่เหมือน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)));
end()
วิธีนี้ใน php 5.4+ ขึ้นไปจะแจ้งให้ทราบ ตามเอกสาร: " คุณต้องส่งผ่านตัวแปรจริงไม่ใช่ฟังก์ชันที่ส่งคืนอาร์เรย์เนื่องจากตัวแปรจริงเท่านั้นที่สามารถส่งผ่านโดยการอ้างอิง "
นี่คือฟังก์ชั่นไดนามิกที่สวยงามที่ฉันเขียนเพื่อลบส่วนสุดท้ายของ url หรือ path
/**
* 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('/')
ประโยชน์ดังที่พบในไลบรารีแบบสแตนด์อโลนนี้