2010-05-19 14 views
7

खाली स्ट्रिंग पर सेट करें निम्नलिखित को पूरा करने का सबसे अच्छा तरीका क्या है।PHP विस्फोट और लापता टुकड़े

मैं इस प्रारूप में तार है:

$s1 = "name1|type1"; //(pipe is the separator) 
$s2 = "name2|type2"; 
$s3 = "name3"; //(in some of them type can be missing) 

मान लेते हैं nameN/typeN तार कर रहे हैं चलो और वे एक पाइप नहीं हो सकते।

जब से मैं नाम exctract की जरूरत /separetly टाइप करें, मुझे क्या करना:

$temp = explode('|', $s1); 
$name = $temp[0]; 
$type = (isset($temp[1]) ? $temp[1] : ''); 

वहाँ एक आसान (होशियार जो कुछ भी तेज) जिस तरह से isset($temp[1]) या count($temp) करने के लिए बिना यह करने के लिए है।

धन्यवाद!

+0

इतना मत सोचो, आपके द्वारा एक्सेस करने की कोशिश आप एक अपवाद/त्रुटि मिलेगी '[1]' पहले की जाँच के बिना। – Aren

+0

यह पहले से ही सबसे प्रभावी समाधान की तरह दिखता है। – EAMann

उत्तर

7
list($name, $type) = explode('|', s1.'|'); 
+0

संभावित नोटिस को संभालने के लिए अच्छी चाल, और शून्य –

+0

अच्छी चाल, +1, बहुत रोचक के बजाय एक खाली स्ट्रिंग। –

-1
if(strstr($temp,"|")) 
{ 
    $temp = explode($s1, '|'); 
    $name = $temp[0]; 
    $type = $temp[1]; 
} 
else 
{ 
    $name = $temp[0]; 
    //no type 
} 

शायद?

+1

बस एक हेड-अप: यदि आप बस इतना करना चाहते हैं कि एक सुई-स्ट्रिंग हैस्टैक-स्ट्रिंग में है, तो आपको 'strpos()! == false' का उपयोग करना चाहिए, यह' strstr() ' । – pinkgothic

4

नोट विस्फोट (के लिए तर्कों की क्रम) हालांकि यह एक सूचना

+0

को अभी भी यह जांचना होगा कि टाइप शून्य है या नहीं, यदि –

+3

यदि आप करते हैं तो इसे '' असाइन करें, यदि आप ऐसा करते हैं: @list ($ name, $ type) = विस्फोट ('|', $ s1), नोटिस निगल जाएगा। @ थॉमस - लीवरेज php की untyped प्रकृति का उपयोग करें और php को इसके उपयोग के आधार पर शून्य मान टाइप करने के लिए अनुमति दें। –

+0

अच्छा बिंदु केविन, मैं –

0

दे देंगे

list($name,$type) = explode('|',$s1); 

$ प्रकार, $ S3 के लिए शून्य हो जाएगा वहाँ $ के बाद से isset क्या करने की जरूरत नहीं है अस्थायी [1] मौजूद होगा और एक खाली मूल्य सामग्री होगी। यह मेरे लिए ठीक काम करता है:

$str = 'name|type'; 

// if theres nothing in 'type', then $type will be empty 
list($name, $type) = explode('|', $str, 2); 
echo "$name, $type"; 
+0

मैं नहीं करता विस्फोट में उपयोग की जाने वाली 2 सीमा, किसके लिए? –

+0

@ मार्को यह सिर्फ मामले में है ... – Cristian

+0

आप सही हैं, लेकिन वास्तव में विकास के दौरान मैं 'error_reporting (E_ALL); 'और जब' $ str =' name'' का उपयोग करता हूं, 'सूची' ($ name, $ प्रकार ') 'एक PHP त्रुटि उगता है' नोटिस: अपरिभाषित ऑफसेट: 1' –

3

मैं array_pop() और array_shift() के एक प्रशंसक है, जो बाहर त्रुटि नहीं है, तो सरणी वे का उपयोग खाली है हूँ।

आपके मामले में, कि होगा:

$temp = explode('|', $s1); 
$name = array_shift($temp); 
// array_shift() will return null if the array is empty, 
// so if you really want an empty string, you can string 
// cast this call, as I have done: 
$type = (string) array_shift($temp); 
+0

दिलचस्प बिंदु, लेकिन मुझे लगता है कि 'सूची' का उपयोग करना है अधिक संक्षिप्त –

संबंधित मुद्दे