पिछले / url में वर्ण पाएं


123

मैं एक url की तरह अंतिम / के बाद वर्ण प्राप्त करना चाहता हूं http://www.vimeo.com/1234567

मैं php के साथ कैसे करूँ?


आपको s($str)->afterLast('/')मदद मिल सकती है , जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है ।
caw

जवाबों:


265

बहुत ही सरलता से:

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

स्ट्रैप्स को स्लैश की अंतिम घटना की स्थिति मिलती है; substr उस स्थिति के बाद रिटर्न सब कुछ।


Redanimalwar द्वारा उल्लेख के रूप में अगर कोई स्लैश नहीं है तो यह सही ढंग से काम नहीं करता है क्योंकि strrposझूठे रिटर्न देता है। यहाँ एक और अधिक मजबूत संस्करण है:

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

यदि कोई स्लैश नहीं है, तो पहले चरित्र की यह कटौती।
लालनिमलवार

@redanimalwar मैं एक और समाधान जोड़ा
DisgruntledGoat

9
मैं सोच रहा हूं कि क्यों $str = basename($url)अधिक उठाव नहीं हो रहा है, मेरे लिए पूरी तरह से ठीक काम करता है।
लालनिमलवार

2
@redanimalwar (1) फ़ाइल नाम पथ के लिए है, URL नहीं - मुझे लगता है कि यह हमेशा एक ही परिणाम देगा, लेकिन बैकस्लैश जैसे किनारे मामले हो सकते हैं; (२) बेसन केवल स्लैश के लिए काम करता है जबकि मेरे उत्तर को आसानी से संशोधित किया जा सकता है यदि कोई व्यक्ति किसी अन्य वर्ण के साथ एक ही काम करना चाहता है।
असंतुष्टगीतगोत्र

धन्यवाद। सरल और व्यावहारिक !!
रोड्रिगो ज़ुलुगा

51
$str = basename($url);

1
क्या यह उरल्स पर काम करता है? फ़ाइल रास्तों के लिए बेसनेम का इरादा नहीं है?
random_user_name

2
ठीक काम करने लगता है, यह एक स्ट्रिंग फ़ंक्शन है; यदि पथ मौजूद है तो यह जाँच नहीं करता है।
गिफोर्ड एन।

14

आप "/" के आधार पर विस्फोट कर सकते हैं , और अंतिम प्रविष्टि वापस कर सकते हैं:

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

यह स्ट्रिंग को अलग-अलग उड़ाने पर आधारित है, कुछ ऐसा जो जरूरी नहीं है यदि आप जानते हैं कि स्ट्रिंग का पैटर्न खुद ही जल्द ही बदल नहीं जाएगा। आप वैकल्पिक रूप से, स्ट्रिंग के अंत में उस मान का पता लगाने के लिए एक नियमित अभिव्यक्ति का उपयोग कर सकते हैं:

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

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

explodeहमेशा मेरे लिए अधिक उपरि की तरह लगता है, हालांकि मैंने कभी यह देखने के लिए समय नहीं दिया है कि यह कितना तेज़ है।
असंतुष्टगीतगेट

ऐसा प्रतीत होता है कि विस्फोट () थोड़ा धीमा है। 10k उदाहरणों पर, यह दोनों के लिए समय की राशि है। पदार्थ () पहला: 0.013657 / 0.045038
सैम्पसन

धीमा हो सकता है, लेकिन मैं यहां विस्फोट पसंद करता हूं। विशेष रूप से अगर url में कोई "/" नहीं है, तो स्ट्रैप के उत्तर में +1 एक गड़बड़ विस्फोट को दूर करने में सक्षम है।
नोआम

1
उदाहरण एक नोटिस फेंकता है और निश्चित रूप से फिर से काम किया जाना चाहिए।
ज़ातिनेव

हां, विस्फोटित डेटा एक चर होना चाहिए
यमकक्स


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

3
मेरा संस्करण, हालाँकि अंतिम परिणाम वही है जो पोस्ट किया गया है, यदि वह चाहे तो ओपी को विभाजित स्ट्रिंग के अन्य मदों का उपयोग करने में सक्षम बनाता है।
घोस्टडॉग .४

यह सही उत्तर है, क्योंकि शीर्षक 'अंतिम' के बाद पूछता है / url में
फैबियानो शार्क


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
 */
private function removeLastDir($path, $level)
{
    if(is_int($level) && $level > 0){
        $path = preg_replace('#\/[^/]*$#', '', $path);
        return $this->removeLastDir($path, (int) $level - 1);
    }
    return $path;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.