ইউআরএল শেষ / শেষের পরে অক্ষর পান


122

আমি সর্বশেষে / ইউআরএল-এর পরে অক্ষরগুলি পেতে চাই http://www.vimeo.com/1234567

আমি পিএইচপি দিয়ে কীভাবে করব?


এই স্ট্যান্ডলোন লাইব্রেরিতেs($str)->afterLast('/') যেমন পাওয়া যায় আপনি তেমন সহায়ক হতে পারেন ।
কাওয়

উত্তর:


264

খুব সহজ:

$id = substr($url, strrpos($url, '/') + 1);

স্ট্র্যাপপস স্ল্যাশের শেষ ঘটনাটির অবস্থান পায়; সাবস্ট্রিট সেই অবস্থানের পরে সবকিছু ফিরিয়ে দেয়।


যেমন রেডানিমালওয়ার উল্লেখ করেছেন যদি কোনও স্ল্যাশ না থাকে তবে এটি সঠিকভাবে কাজ করে না যেহেতু strrposমিথ্যা প্রত্যাবর্তন করে। এখানে আরও শক্তিশালী সংস্করণ:

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);

যদি কোনও স্ল্যাশ না থাকে তবে প্রথম অক্ষরটি কেটে দেয়।
redanimalwar

@redanimalwar আমি আরও একটি সমাধান যুক্ত করেছি
অসন্তুষ্টগোট

8
আমি ভাবছি কেন কেন $str = basename($url)আরও উপায়ে পাওয়া যাচ্ছে না, আমার জন্য পুরোপুরি সূক্ষ্ম কাজ করে।
redanimalwar

1
@redanimalwar (1) বেসনামটি ইউআরএল নয়, ফাইল পাথের উদ্দেশ্যে তৈরি - আমি মনে করি এটি সর্বদা একই ফল ফিরে আসবে তবে ব্যাকস্ল্যাশের মতো প্রান্তের ঘটনাও ঘটতে পারে; (২) বেসনামটি কেবল স্ল্যাশের জন্য কাজ করে যখন অন্য কেউ একই চরিত্রের সাথে একই জিনিস করতে চাইলে আমার উত্তরটি সহজেই সংশোধন করা যায়।
অসন্তুষ্ট গোয়াট

ধন্যবাদ। সহজ এবং অনুশীলন !!
রদ্রিগো জুলুয়াগা

50
$str = basename($url);

1
এটি কি ইউআরএল নিয়ে কাজ করে? বেস নাম কি ফাইল পাথের উদ্দেশ্যে নয়?
এলোমেলো_ ব্যবহারকারী_নাম

2
ঠিকঠাক কাজ করার মতো মনে হচ্ছে, এটি একটি স্ট্রিং ফাংশন; পথটি বিদ্যমান কিনা তা পরীক্ষা করে না।
জিফফোর্ড এন।

14

আপনি "/" এর উপর ভিত্তি করে বিস্ফোরণ করতে পারেন এবং শেষ এন্ট্রিটি ফিরে আসতে পারেন:

print end( explode( "/", "http://www.vimeo.com/1234567" ) );

এটি স্ট্রিংকে পৃথক করে ফুটিয়ে তোলার উপর ভিত্তি করে তৈরি করা হয়েছে, যদি আপনি স্ট্রিংয়ের প্যাটার্নটি নিজেই জানেন যে খুব শীঘ্রই পরিবর্তন হবে না necessary আপনি বিকল্প হিসাবে স্ট্রিংয়ের শেষে সেই মানটি সনাক্ত করতে একটি নিয়মিত অভিব্যক্তি ব্যবহার করতে পারেন:

$url = "http://www.vimeo.com/1234567";

if ( preg_match( "/\d+$/", $url, $matches ) ) {
    print $matches[0];
}

explodeআমার কাছে সবসময়ই বেশি ওভারহেডের মতো মনে হয়, যদিও আমি এটির তত দ্রুত তা দেখতে কখনই সময় নিই নি।
অসন্তুষ্ট গোয়াট

এটি প্রদর্শিত হয় বিস্ফোরণ () কিছুটা ধীর is 10 কে উদাহরণস্বরূপ, এটি উভয়ের জন্য নেওয়া সময়ের পরিমাণ। substr () প্রথম: 0.013657 / 0.045038
স্যাম্পসন

ধীর হতে পারে তবে আমি এখানে বিস্ফোরণ পছন্দ করি। বিশেষত যদি ইউআরএলটিতে কোনও "/" থাকে না তবে স্ট্রপপস উত্তরে একটি +1 একটি জগাখিচুড়ি বিস্ফোরণকে কাটিয়ে উঠতে সক্ষম করে।
নওম

1
উদাহরণটি একটি নোটিশ ছুড়ে দেয় এবং অবশ্যই পুনরায় কাজ করা উচিত।
জাতেনেভ

হ্যাঁ, বিস্ফোরিত ডেটা অবশ্যই একটি পরিবর্তনশীল হতে হবে
ymakux


8
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);

3
আমার সংস্করণ, যদিও শেষ ফলাফলটি পোস্টের মতো একই, ওপি যদি ইচ্ছা করে তবে বিভক্ত স্ট্রিংয়ের অন্যান্য আইটেমগুলি ব্যবহার করতে সক্ষম করে।
ghostdog74

এটি সঠিক উত্তর, যেহেতু শিরোনামটি 'শেষ' / ইউআরএল পরে জিজ্ঞাসা করেছে
ফ্যাবিয়ানো শার্ক

1

array_pop(explode("/", "http://vimeo.com/1234567")); উদাহরণ url এর শেষ উপাদানটি ফিরিয়ে দেবে


php7 মধ্যে রিটার্নস বিজ্ঞপ্তি: PHP Notice: Only variables should be passed by reference
বিলেণোহ

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)));

@ রেডবার্ন, end()পিএইচপি 5.4+ এবং এইভাবে ব্যবহার করা একটি নোটিশ ফেলে দেবে। ডক্স অনুসারে: " আপনাকে অবশ্যই এটি একটি আসল পরিবর্তনশীলটি পাস করতে হবে এবং কোনও অ্যারে ফেরত দেওয়ার কোনও ফাংশন নয় কারণ কেবল প্রকৃত ভেরিয়েবলগুলি রেফারেন্স দ্বারা পাস করা যেতে পারে। "
বিলেণোহ

-1

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.