मैं व्हॉट्सएप को कैसे विस्फोट और ट्रिम कर सकता हूं?


167

उदाहरण के लिए, मैं इस स्ट्रिंग में तत्वों से एक सरणी बनाना चाहूंगा:

$str = 'red,     green,     blue ,orange';

मुझे पता है कि आप उनके माध्यम से विस्फोट और लूप कर सकते हैं और ट्रिम कर सकते हैं:

$arr = explode(',', $str);
foreach ($arr as $value) {
    $new_arr[] = trim($value);
}

लेकिन मुझे लगता है कि एक लाइन दृष्टिकोण है जो इसे संभाल सकता है। कोई विचार?

जवाबों:


449

आप array_map का उपयोग करके निम्नलिखित कार्य कर सकते हैं :

$new_arr = array_map('trim', explode(',', $str));

10
पीएचपी द्वारा यह (आंतरिक रूप से) लूपिंग भी है
जेसन OOO

2
यह .... मेरे .... जीवन को बचाया .... मैं एक फ़ाइल के अंत में संलग्न करने के लिए fseek के माध्यम से एक फ़ाइल में हेरफेर करने की कोशिश कर रहा था ... एक बार जब मैंने इसे एक सरणी में तोड़ने और फिर से लिखने का फैसला किया। फ़ाइल, मैंने देखा कि पूरे समय अतिरिक्त व्हाट्सएप जोड़ा जा रहा था ... इस + निहितार्थ ने मेरे भयावह जीवन को बचाया..मैं अब खाना खा सकता हूं।
jenki221

4
@ जसोनोओ मुझे लगता है कि ज्यादातर लोगों की राय में, एक जोड़ी मिलीसेकंड (यदि वह भी है) कोड की एक पंक्ति होने के लिए एक उचित व्यापार है जो संक्षिप्त, सरल और आसानी से पठनीय है।
गैविन

सरल और समझने में आसान। हालाँकि, यदि बड़े डेटा सेटों के साथ काम किया जाता है, तो @ amr-eladwy द्वारा प्रदान किया गया अधिक प्रदर्शन बेहतर समाधान है।
यार्न

मुझे यह कोड बहुत पसंद है और अब इस साइट पर वापस आ जाओ!
patrickzzz

52

एक बेहतर जवाब

preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red,     green thing ,,  ,,   blue ,orange');

परिणाम:

Array
(
    [0] => red
    [1] => green thing
    [2] => blue
    [3] => orange
)

यह

  • केवल अल्पविराम पर विभाजन
  • प्रत्येक मद से सफेद रिक्त स्थान ट्रिम।
  • खाली वस्तुओं की उपेक्षा करता है
  • "ग्रीन चीज़" जैसे आंतरिक स्थानों के साथ एक आइटम को विभाजित नहीं करता है

7
क्या कोई मुझे समझा सकता है कि इस उत्तर में 100 उत्थान क्यों नहीं हैं? Regexp को समझना मुश्किल है, लेकिन इसने अन्य समाधानों की तुलना में मेरी 100Mb फाइल को तेजी से पार कर लिया है
Dan

2
मुझे खुशी है कि आपने इसे मददगार पाया। मैंने सभी उत्तर पढ़े और बेहतर मिश्रण के साथ आया। रेगेक्स को विवरण में समझाया जा सकता है।
अमर एलावेई

2
क्षमा करें, लेकिन यह regex गलत है - के redसाथ बदलने का प्रयास करें *red*। एक बेहतर (/ s *, \ s *) + /
ग्रेग

@AmrElAdawy FYI करें यह 8/28 अपडेट के बाद काम नहीं करता है। जैसे-जैसे उत्तर में रेगेक्स के साथ, कुछ तत्वों से सफेद स्थान की छंटनी नहीं की जाती है। Ex: `हरी चीज़`।
१18:

1
@Samsquanch अपडेट किया गया। यदि आपको कोई समस्या दिखाई देती है तो कृपया मुझे बताएं।
बजे अमार अलअदवी

25

निम्नलिखित इनपुट स्ट्रिंग के प्रारंभ / अंत में सफेद-रिक्त स्थान का भी ध्यान रखता है:

$new_arr = preg_split('/\s*,\s*/', trim($str));

और यह हर समझदार स्थिति में सफेद स्थानों के साथ एक न्यूनतम परीक्षण है:

$str = ' first , second , third , fourth, fifth ';
$new_arr = preg_split('/\s*,\s*/', trim($str));
var_export($str);

चूंकि array_mapऔर rexxp समाधान समान परिणाम देते हैं, क्या कोई भी उनके प्रदर्शन की तुलना कर सकता है?
डैन

@ इस तरह के मामलों के लिए, यह कोई अंतर नहीं होगा।
एरिस

4

यह आप कोड की एक पंक्ति में कैसे प्रतिस्थापित और विस्फोट करते हैं

$str = 'red,     green,     blue ,orange';

$new_string = explode(',',preg_replace('/\s+/', '', $str));

परिणाम के रूप में उत्पादन होगा

Array
(
    [0] => red
    [1] => green
    [2] => blue
    [3] => orange
)

3

मौजूदा उत्तरों में से कुछ प्रिंसिपलों को मिलाकर मैं आया

preg_split ('/\s*,+\s*/', 'red,     green thing ,,  ,,   blue ,orange', NULL, PREG_SPLIT_NO_EMPTY);

इसके पीछे तर्क यह है कि मुझे इस उत्तर में एक बग मिला , जहां अगर स्ट्रिंग के अंत में एक अल्पविराम है तो यह सरणी में एक खाली तत्व वापस कर देगा। अर्थात

preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red,     green thing ,,  ,,   blue ,orange,');

का परिणाम

Array
(
  [0] => red
  [1] => green thing
  [2] => blue
  [3] => orange
  [4] => ''
)

आप इसे हटाने के लिए इस उत्तर में वर्णित PREG_SPLIT_NO_EMPTY का उपयोग करके इसे ठीक कर सकते हैं , लेकिन एक बार जब आप यह कर रहे हैं कि तकनीकी रूप से regex के माध्यम से लगातार अल्पविराम को हटाने की कोई आवश्यकता नहीं है, इस प्रकार छोटा अभिव्यक्ति


2

आप इसे एक पंक्ति regex के साथ भी कर सकते हैं

preg_split('@(?:\s*,\s*|^\s*|\s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);

1

इसे इस्तेमाल करे:

$str = preg_replace("/\s*,\s*/", ",", 'red,     green,     blue ,orange');

ओपी एक सरणी चाहता है। preg_replace()एक स्ट्रिंग से एक सरणी उत्पन्न नहीं करता है। यह गलत प्रश्न का सही उत्तर है। Downvoted।
मिकमैकुसा

1
$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');मामूली संशोधन उत्तर का पुनर्वास करता है
dreftymac

1

विशेष रूप सेओपी के सैंपल स्ट्रिंग के लिए , क्योंकि मिलान किए जाने वाले प्रत्येक प्रतिस्थापन एक शब्द है, आप str_word_count () का उपयोग कर सकते हैं ।

कोड: ( डेमो )

$str = ' red,     green,     blue ,orange ';
var_export(str_word_count($str,1));  // 1 means return all words in an indexed array

आउटपुट:

array (
  0 => 'red',
  1 => 'green',
  2 => 'blue',
  3 => 'orange',
)

यह अक्षरों (और कुछ हाइफ़न और एपोस्ट्रोफ़्स - यदि आप ठीक प्रिंट पढ़ते हैं) से परे सब्सट्रिंग के लिए अनुकूलित किया जा सकता है, तो चरित्र मास्क / 3 डी पैरामीटर के लिए आवश्यक वर्ण जोड़कर।

कोड: ( डेमो )

$str = " , Number1 ,     234,     0 ,4heaven's-sake  ,  ";
var_export(str_word_count($str,1,'0..9'));

आउटपुट:

array (
  0 => 'Number1',
  1 => '234',
  2 => '0',
  3 => '4heaven\'s-sake',
)

फिर से, मैं इस सवाल का नमूना स्ट्रिंग की वजह से बहुत कम कर रहा हूं, लेकिन यह एक ही वांछित आउटपुट प्रदान करेगा:

कोड: ( डेमो )

$str = ' red,     green,     blue ,orange ';
var_export(preg_match_all('/[^, ]+/',$str,$out)?$out[0]:'fail');

0

आप उसके लिए preg_split () का उपयोग कर सकते हैं ।

$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);

/* Result:
  Array
  (
      [0] => red
      [1] => green
      [2] => blue
      [3] => orange
  )
 */

यह आपके तत्वों में रिक्त स्थान पर विभाजित होगा
क्रिस केएल

अल्पविराम आवश्यक बनाने के लिए वर्ग ब्रेस के बाईं ओर अल्पविराम को स्थानांतरित करें।
एरिक लेसचिंस्की

कोमा को बाईं ओर ले जाने से उसका हल नहीं होगा। कृपया नीचे दिए गए मेरे जवाब की जांच करें stackoverflow.com/a/38300330/5079380
अमृत ​​एलएडावी


-11

ट्रिम और विस्फोट

$ str = 'लाल, हरा, नीला, नारंगी';

$ str = ट्रिम ($ str);

$ strArray = विस्फोट (',', $ str);

print_r ($ strArray);


5
यह केवल एक स्ट्रिंग की शुरुआत और अंत से व्हाट्सएप को अलग करता है, प्रत्येक रंग के बीच नहीं।
सीनडब्ल्यूएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.