2012-02-01 26 views
29

में एक स्ट्रिंग पीएचपी 5.3 में की पहली पंक्ति प्राप्त एक nice function कि मैं क्या चाहते हो रहा है है उपलब्ध नहीं है। क्या पिछले संस्करणों में एक पंक्ति में इसे हासिल करने का कोई तरीका है?पीएचपी

+0

आप उस '\ n' के आस-पास डबल कोट्स का उपयोग करना चाहेंगे। जब मैं ईमेल सामग्री बनाते समय एकल कोट्स में था, तो \ n' न्यूलाइन चरित्र की बजाय नियमित वर्णों के रूप में बाहर आया। – Svish

+0

क्यों 'एक पंक्ति' प्रतिबंध? – misterjinx

उत्तर

84

ये रहा

$str = strtok($input, "\n"); 

strtok() Documentation

+0

सबसे तेज़ तरीका –

+0

पसीना समाधान! – misterjinx

+0

मैं यह नहीं कहूंगा कि यह सबसे तेज़ है (और मैं खुद को गति तुलना के साथ परेशान नहीं करता) लेकिन यह स्पष्ट रूप से * सबसे छोटा * –

4
$first_line = substr($fulltext, 0, strpos($fulltext, "\n")); 

या कुछ ऐसा करने से चाल चलती है। बदसूरत, लेकिन काम करने योग्य।

1

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

substr($text, 0, strpos($text, chr(10)) 
0

आप strpossubstr के साथ संयुक्त उपयोग कर सकते हैं। सबसे पहले आपको वह स्थिति मिलती है जहां चरित्र स्थित है और फिर आप स्ट्रिंग के उस भाग को वापस कर देते हैं।

$pos = strpos(input, "\n"); 

if ($pos !== false) { 
echo substr($input, 0, $pos); 
} else { 
echo 'String not found'; 
} 

क्या आप यह चाहते हैं?

l.e. एक लाइन प्रतिबंध को ध्यान में नहीं देखा, इसलिए यह इस तरह लागू नहीं है। आप दोनों कार्यों को केवल एक पंक्ति में जोड़ सकते हैं जैसे कि अन्य सुझाव दिए गए हैं या आप एक कस्टम फ़ंक्शन बना सकते हैं जिसे कोड की एक पंक्ति में वांछित कहा जाएगा। आपकी पंसद।

+0

एक लाइनर नहीं – kinokijuf

+0

एक लाइन प्रतिबंध? क्या इसका कोई कारण है ?आप जानते हैं कि आप हमेशा अपना स्वयं का फ़ंक्शन बना सकते हैं जिसे कोड के केवल 'एक पंक्ति' में बाद में कहा जा सकता है, है ना? – misterjinx

1
list($line_1, $remaining) = explode("\n", $input, 2); 

आसान शीर्ष पंक्ति पाने के लिए बनाता है और सामग्री को पीछे छोड़ दिया है, तो आप आपरेशन को दोहराने के लिए करना चाहता था। अन्यथा सुझाव के रूप में substr का उपयोग करें।

+0

आप –

+0

हालांकि शेष छोड़ सकते हैं, लेकिन जैसा कि मैंने कहा था कि यदि आप शीर्ष एक्स लाइनों को चाहते हैं तो मेरी मूल "सूची ($ line_1, $ शेष) = विस्फोट (" \ n ", $ इनपुट, 2) का उपयोग करके;" एक दोहराव की कार्रवाई की अनुमति होगी। इस संपादन के साथ मेरी पोस्ट बल्कि अर्थहीन है !? बस बनाने के लिए एक बहुत ही अजीब संपादन की तरह लगता है ... –

+0

अच्छी तरह से परिणाम कॉल के लिए strtok अभी भी बेहतर होगा। –

9

यह देर हो चुकी है, लेकिन आप विस्फोट इस्तेमाल कर सकते हैं।

<?php 
$lines=explode("\n", $string); 
echo $lines['0']; 
?> 
+3

वापस लौटाएगा आप इस उदाहरण में स्ट्रिंग कुंजी का उपयोग क्यों करते हैं? क्या यह '$ लाइनें [0]' होनी चाहिए? – trejder

+1

नोट: यदि आपको केवल पहली पंक्ति की आवश्यकता है, तो यह अक्षम है। जैसे यदि '$ string' एक सौ मेगाबाइट है और पहली पंक्ति केवल कुछ बाइट्स है, तो यह समाधान एक सौ मेगाबाइट स्मृति को बर्बाद कर देता है और आपकी स्क्रिप्ट को समाप्त भी किया जा सकता है क्योंकि आप स्मृति सीमा को दबाते हैं। –

+0

'वर्तमान (विस्फोट (" \ n ", $ स्ट्रिंग)); 'इसे छोटा करता है और मध्यवर्ती चर और मेमोरी अपशिष्ट के मुद्दे को हल करता है। – billynoah

1

लाइनब्रेक प्रतीक के प्रकार से निर्भर नहीं है।

(($pos=strpos($text,"\n"))!==false) || ($pos=strpos($text,"\r")); 

$firstline = substr($text,0,(int)$pos); 

$ FIRSTLINE अब, पाठ या रिक्त स्ट्रिंग से पहली पंक्ति को शामिल करता है, तो कोई तोड़ प्रतीकों मिली (या तोड़ने के प्रतीक पाठ में पहली बार एक प्रतीक है)।

0

कई बार स्ट्रिंग परिवर्तन वार्स कि एक रिक्त पंक्ति के साथ शुरू का सामना करना पड़ेगा, इसलिए मत का मूल्यांकन करने के अगर तुम सच में श्रृंखला का पहला और अंत में सफेद लाइनों पर विचार करें, या यह ट्रिम। इसके अलावा, ओएस गलतियों से बचने के लिए, PHP_EOL का उपयोग क्रॉस-प्लेटफ़ॉर्म-संगत तरीके (When do I use the PHP constant "PHP_EOL"?) में न्यूलाइन वर्ण खोजने के लिए किया जाता है।

$lines = explode(PHP_EOL, trim($string)); 
echo $lines[0];