আমি কীভাবে বিস্ফোরণ এবং সাদা স্থান ট্রিম করতে পারি?


167

উদাহরণস্বরূপ, আমি এই স্ট্রিংয়ের উপাদানগুলি থেকে একটি অ্যারে তৈরি করতে চাই:

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

আমি জানি যে আপনি বিস্ফোরণ এবং এগুলির মধ্য দিয়ে লুপ করতে পারেন এবং ছাঁটাই করতে পারেন:

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

তবে আমি অনুভব করি যে এখানে একটি লাইন পদ্ধতি রয়েছে যা এটি পরিচালনা করতে পারে। কোন ধারনা?

উত্তর:


449

আপনি অ্যারে_ম্যাপ ব্যবহার করে নিম্নলিখিতটি করতে পারেন :

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

10
এটি পিএইচপি দ্বারা লুপিং (অভ্যন্তরীণভাবে)
জেসন ওইও

2
এই .... সংরক্ষণ .... আমার ... জীবন .... আমি একটি ফাইলের শেষের সাথে সংযুক্ত করার জন্য ফসেকের মাধ্যমে একটি ফাইল ম্যানিপুলেট করার চেষ্টা করছিলাম ... একবার আমি সিদ্ধান্ত নিয়েছিলাম এটির অ্যারে করে আবার লিখতে হবে ফাইলটি, আমি দেখেছি যে পুরো সময় অতিরিক্ত অতিরিক্ত শ্বেত স্থান যুক্ত করা হয়েছিল ... এই + বদ্ধমূল আমার প্রাণবন্ত জীবন বাঁচিয়েছে..আমি এখন খাবার খেতে যেতে পারি।
jenki221

4
@ জেসনোইউ আমি বেশিরভাগ মানুষের মতামত অনুসারে ভাবি, সংক্ষিপ্ত, সরল এবং সহজেই পঠনযোগ্য এমন একটি লাইন কোডের জন্য বেশ কয়েকটি মিলিসেকেন্ড (এমনকি তা হলেও) একটি উপযুক্ত বাণিজ্য।
গ্যাভিন

সহজ এবং বুঝতে সহজ। তবে, যদি বড় ডেটা সেটগুলির সাথে কাজ করে তবে @ এমআর-এলাদ্বির দ্বারা সরবরাহ করা আরও পারফরম্যান্ট উত্তর হ'ল আরও ভাল সমাধান।
ইয়ারন

আমি এই কোডটির টুকরোটি পছন্দ করি এবং এখনই এই সাইটে ফিরে আসছি!
প্যাট্রিকজ্জেড

51

একটি উন্নত উত্তর

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

ফলাফল:

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

এই

  • শুধুমাত্র কমাতে বিভক্ত
  • প্রতিটি আইটেম থেকে সাদা স্পেস ছাঁটাই।
  • খালি আইটেম উপেক্ষা করে
  • "সবুজ জিনিস" এর মতো অভ্যন্তরীণ স্পেস সহ কোনও আইটেম বিভক্ত করবেন না

7
এই উত্তরটির 100 টি উপাখ্যান নেই কেন কেউ আমাকে ব্যাখ্যা করতে পারেন? রেজিএক্সপ্যাক্স বোঝা শক্ত, তবে এটি আমার 100 এমবি ফাইলটিকে অন্যান্য সমাধানের চেয়ে দ্রুত পার্স করেছে
ড্যান

2
আপনি এটি সহায়ক বলে আমি খুশি। আমি সমস্ত উত্তর পড়লাম এবং একটি ভাল মিশ্রণ সঙ্গে এসেছি। রেজেক্স বিস্তারিতভাবে ব্যাখ্যা করা যেতে পারে।
আমর এলএডাওয়াই

2
দুঃখিত তবে এই রেজেক্সটি ভুল - এর redসাথে প্রতিস্থাপনের চেষ্টা করুন *red*। আরও ভাল হতে পারে / (\ গুলি *, * গুলি *) + /
গ্রেগ

@ আমরএল অ্যাডওয়াই এফওয়াইআই এটি 8/28 আপডেটের পরে আর কাজ করে না। উত্তরে যেমন রেগেক্স রয়েছে তেমনি কিছু উপাদান থেকে সাদা স্থান ছাঁটাই করা হয় না। উদাঃ `সবুজ জিনিস`
স্যামসকাঞ্চ

1
@ স্যামসকোঞ্চ আপডেট হয়েছে। আপনি যদি কোন সমস্যা দেখতে পান তবে আমাকে জানান।
আমর এলআদাউই

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এবং রিজ এক্সপ্লেক্স সমাধানগুলি অভিন্ন ফলাফল দেয়, কেউ কি তাদের পারফরম্যান্সের তুলনা করতে পারে?
ড্যান

@ ড্যান এই জাতীয় ক্ষেত্রে এর জন্য কোনও পার্থক্য হবে না।
এরিস

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 ব্যবহার করে এটি ঠিক করতে পারেন, তবে একবার আপনি এটি করছেন যে প্রযুক্তিগতভাবে রেজেক্সের মাধ্যমে ক্রমাগত কমাগুলি অপসারণ করার প্রয়োজন নেই, সুতরাং সংক্ষিপ্ত প্রকাশ


2

আপনি ওয়ান লাইন রেজেক্সের সাহায্যে এটিও করতে পারেন

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

1

এটা চেষ্টা কর:

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

ওপি একটি অ্যারে চায়। preg_replace()স্ট্রিং থেকে একটি অ্যারে তৈরি করে না। এটি ভুল প্রশ্নের সঠিক উত্তর is 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',
)

অক্ষরের বাইরেও সাবস্ট্রিংয়ের (এবং কিছু হাইফেন এবং অ্যাডোস্ট্রোফস - যদি আপনি সূক্ষ্ম মুদ্রণটি পড়ে থাকেন) অক্ষর মাস্ক / তৃতীয় প্যারামিটারে প্রয়োজনীয় অক্ষর যুক্ত করে এটির জন্যও রূপান্তর করতে পারেন।

কোড: ( ডেমো )

$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

আপনি তার জন্য প্রিগ_স্প্লিট () ব্যবহার করতে পারেন ।

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

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

এটি আপনার উপাদানগুলির
ক্রিস কেএল

কমাটি প্রয়োজনীয় করতে বর্গাকার ধনুর্বন্ধনী বামে কমাটি বামে সরান।
এরিক লেসচিনস্কি

কমা বাম দিকে সরিয়ে নেওয়া এটি সমাধান করবে না। দয়া করে নীচে আমার উত্তর পরীক্ষা stackoverflow.com/a/38300330/5079380
আমর ElAdawy


-11

ছাঁটাই এবং বিস্ফোরিত

$ str = 'লাল, সবুজ, নীল, কমলা';

$ str = ছাঁটা ($ স্ট্র);

$ strArray = বিস্ফোরিত (',', $ str);

print_r ($ strArray);


5
এটি কেবল স্ট্রিংয়ের শুরু এবং শেষ থেকে সাদা রঙের স্ট্রিপগুলি পৃথক করে, প্রতিটি রঙের মধ্যে নয়।
SeanWM
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.