2009-12-02 15 views
10

क्या किसी विशेष वर्ण के बाद स्ट्रिंग को ट्रिम करने के लिए कोई php स्ट्रिंग फ़ंक्शन है। मैंने php.net साइट पर एक नज़र डाली और एक Google खोज किया लेकिन कुछ भी नहीं मिला। एकमात्र समाधान जिसे मैं सोच सकता था विस्फोट हुआ और फिर सरणी के पहले भाग को पकड़ लिया लेकिन यह सबसे सुंदर समाधान नहीं है।किसी विशेष वर्ण पर PHP ट्रिम स्ट्रिंग

उदाहरण

लिए
$string = "/gallery/image?a=b"; 
$string = imaginary_function($string,'?'); 
echo $string; //echoes "/gallery/image" 

किसी को भी php स्ट्रिंग परिवर्तन कार्यों के लिए एक अच्छा नकल पुस्तिकाओं की पता है? धन्यवाद

+0

आप मिल सकती है [> beforeFirst ('?') '' रों ($ str)]: इसलिए यह एक समारोह है कि इस तरह के डेटा को संभालने के लिए बनाया गया है का उपयोग करने के लिए और अधिक समझ में आता है /delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L389) या ['s ($ str) -> पहले से पहले ('?')'] (https://github.com/delight- आईएम/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L399) उपयोगी है, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP-Str)। – caw

उत्तर

21

आप explode इस्तेमाल कर सकते हैं:

$string = "/gallery/image?a=b"; 
list($url,$querystring) = explode('?', $string, 2); 
+1

+1 कम से कम जटिल – seanmonstar

+0

उपयोगी, क्योंकि अब मेरे पास एक चर में क्वेरी स्टिंग है, इसलिए यदि मुझे आवश्यकता हो तो मैं इसे बाद में उपयोग कर सकता हूं। मैं अपने कोड को कम करने के बारे में सब कुछ कर रहा हूँ। – andrew

+0

+1 - मेरे कोड से Neater। –

23

हो सकता है कि कुछ इस तरह:

$string = substr($string, 0, strpos($string, '?')); 

ध्यान दें कि यह बहुत मजबूत नहीं है (जैसे कोई त्रुटि जाँच, आदि), लेकिन यह आप अपनी समस्या को हल करने में मदद कर सकते हैं।

+0

मजेदार, मैं बस एक ही समाधान के साथ आया, इस सरल समस्या से संपर्क करने के कई अलग-अलग तरीके हैं – andrew

+0

आश्चर्य की बात नहीं है कि PHP को पर्ल से ढीला रूप से लिया गया था;) http://en.wikipedia.org/wiki/ वहां% 27s_more_than_one_way_to_do_it – jheddings

+0

लेकिन अगर यह '?' विफल हो जाएगा स्ट्रिंग में नहीं मिला है, यानी इसका परिणाम एक खाली स्ट्रिंग होगा। –

2
function imaginary_function($string, $char) { 
    $index = strpos($char, $needle); 
    if ($index === false) { return $string }; 

    return substr($string, 0, $index); 
} 

एक उत्कृष्ट, स्ट्रिंग परिवर्तन कार्यों की आधिकारिक सूची उपलब्ध here है।

4

strstr और stristr फ़ंक्शंस स्ट्रिंग में पहली घटना पाता है और इसके बाद सब कुछ देता है (खोज स्ट्रिंग सहित)। लेकिन यह तीसरे तर्क के रूप में true की आपूर्ति करता है, यह खोज स्ट्रिंग के सामने सबकुछ वापस लाता है।

$string = strstr($string, '?', true); # Returns /gallery/image 

तो नहीं मिलता है यह रिटर्न FALSE तो आप इस तरह एक त्रुटि की जांच लिख सकते हैं:

if($path = strstr($string, '?', true)){ 
    # Do something 
} 
+1

'stristr' से सावधान रहें:" मिलान किए गए सबस्ट्रिंग को वापस करता है। अगर सुई नहीं मिलती है, तो 'FALSE'' लौटाती है। " –

+0

आपको 'स्ट्रिस्टर' की आवश्यकता नहीं है। 'स्ट्रस्ट्र' पर्याप्त होगा। – Gumbo

+0

धन्यवाद @ डोमिनिक और @ गंबो। आपकी दोनों टिप्पणियों को दर्शाने के लिए मेरा उत्तर अपडेट किया गया। –

9

प्रयास करें strtok:

$token = strtok($str, '?'); 

ध्यान दें कि दूसरा पैरामीटर एक है विभाजक की सूची और विभाजक स्ट्रिंग नहीं।

+1

सी stdlib string.h जाओ! – warren

0

यह आप जो करने की कोशिश कर रहे हैं उसके लिए यह अधिक हो सकता है, लेकिन यदि आप एक यूआरएल को टुकड़ों में तोड़ना चाहते हैं, तो PHP फ़ंक्शन parse_url आज़माएं। यहां PHP manual page है।

आप परिणामस्वरूप सरणी के "पथ" भाग चाहते हैं।

1

हालांकि शुद्ध स्ट्रिंग फ़ंक्शन बेहतर प्रदर्शन दे सकते हैं, यह केवल एक स्ट्रिंग नहीं है; यह एक यूआरआई है। (Https://github.com -

echo parse_url("/gallery/image?a=b", PHP_URL_PATH); 
// Output: /gallery/image 
संबंधित मुद्दे