নতুন লাইনে বিভক্ত হয়ে আমি অ্যারেগুলিতে স্ট্রিংগুলি কীভাবে রাখতে পারি?


220

আমার ডাটাবেসে লাইন ব্রেকগুলির সাথে আমার একটি স্ট্রিং রয়েছে। আমি সেই স্ট্রিংটিকে একটি অ্যারেতে রূপান্তর করতে চাই এবং প্রতিটি নতুন লাইনের জন্য অ্যারেতে একটি সূচক জায়গায় ঝাঁপ দাও।

যদি স্ট্রিংটি হয়:

My text1
My text2
My text3

আমি যে ফলাফলটি চাই তা হ'ল:

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)

1
আমি পিএইচপি জানি না তবে স্ট্রিংয়ের জন্য সাধারণত "স্প্লিট" নামে একটি ফাংশন থাকে। এটি এর মতো কাজ করে: অ্যারে = স্প্লিট (স্ট্রিং, "\ n")
সেদাত কাপানোগলু

আপনার প্রথমে নিউলাইনগুলি স্বাভাবিক করা উচিত, সম্ভবত। পদ্ধতিটি s($yourString)->normalizeLineEndings()পাওয়া যায় github.com/delight-im/PHP-Str (এমআইটি লাইসেন্সের অধীনে গ্রন্থাগার) যার সাথে প্রচুর অন্যান্য দরকারী স্ট্রিং সহায়ক রয়েছে। আপনি সোর্স কোডটি একবার দেখে নিতে পারেন।
কাও

উত্তর:


290

বিভাজক হিসাবে explode" \n" ব্যবহার করে আপনি ফাংশনটি ব্যবহার করতে পারেন :

$your_array = explode("\n", $your_string_from_db);

উদাহরণস্বরূপ, আপনার কাছে কোডের এই অংশটি থাকলে:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);

আপনি এই আউটপুট পেতে চাই:

array
  0 => string 'My text1' (length=8)
  1 => string 'My text2' (length=8)
  2 => string 'My text3' (length=8)


নোট করুন যে আপনাকে একটি ডাবল-কোটেড স্ট্রিং ব্যবহার করতে হবে , সুতরাং \nআসলে লাইন-ব্রেক হিসাবে ব্যাখ্যা করা হয়।
(আরও তথ্যের জন্য সেই ম্যানুয়াল পৃষ্ঠাটি দেখুন))


52
পরিবর্তে \nআপনি পূর্বনির্ধারিত ধ্রুবক ব্যবহার করতে পারেন PHP_EOL
টিম

40
সবাই দয়া করে এই সমাধানটি সম্পর্কে সতর্ক হন, কারণ এটি সমস্ত নতুন লাইনে কাজ করে না। আমি ডেভিডের উত্তর দিয়ে সর্বাধিক সাফল্য পেয়েছি
মরিস

1
সকল ধরণের পাঠ্য পরিচালনা করতে আপনাকে You n বা \ r এ বিভক্ত হতে হবে - এটি কেবল লিনাক্স এবং উইন্ডোজের নতুন লাইনের সাথে কাজ করবে। ম্যাক নিউলাইনগুলি উপেক্ষা করা হবে! (\ r)
স্টিভ হরভাথ

1
আমার ধারণা টিমসের উত্তর / মন্তব্য সঠিক নয়, কারণ এটি কেবল আপনার সিস্টেমে লাইনব্রেকের সাথে মেলে তবে আপনি যখন অন্য সিস্টেম থেকে লাইনব্রেকগুলি সহ স্ট্রিং পাবেন তখন এটি কাজ করবে না! ইমেলগুলির সাথে এই সমস্যা ছিল
আসারা

7
এই উত্তরটি হ্যাঁ এবং এই উত্তরের মন্তব্যগুলি ভুল! কারণ এটি ওএস নিউলাইন চরিত্রের মধ্যে বিশেষণ দেয় না PHP_EOL। আপনার অবশ্যই ব্যবহার করা উচিত preg_split("/\\r\\n|\\r|\\n/", $value)
kjdion84

330

আমি সর্বদা এটি দুর্দান্ত সাফল্যের সাথে ব্যবহার করেছি:

$array = preg_split("/\r\n|\n|\r/", $string);

(চূড়ান্ত with আর দিয়ে আপডেট হয়েছে, ধন্যবাদ @ লবস্টারম্যান)


11
এই উত্তরটি পাস্কেলের পরিবর্তে শীর্ষে থাকা উচিত। সে সব ক্ষেত্রে কাজ করে নি!
জিতেশ কেটি

1
এই উত্তর। যাচাই করা একটি ভুল W ঠিক আছে, হিটসেলবামের এটিও রয়েছে ... আপনি এই সমতুল্যটিও ব্যবহার করতে পারেন: প্রেগ_স্প্লিট ('/ \ n | \ r /', $ স্ট্রিং, -1, PREG_SPLIT_NO_EMPTY); সৌন্দর্যের জন্য :) কেন এই একমাত্র ভাল উত্তর? আপনি কী ধরণের লাইনের শেষ পাবেন তা ধরে নিতে পারবেন না: ম্যাক (\ r), উইন্ডোজ (\ r \ n), বা ইউনিক্স (\ n)।
নিনজ

2
\R ম্যাচ \n , \rএবং\r\n
mpen

1
বা আরও সংক্ষিপ্ত/\r?\n/
জেসন শিলিং

এই উদাহরণটি সঠিক কারণ আপনি কেবল কোনও একক অক্ষরের উপর ভিত্তি করে কোনও বিভাজন অপারেশন নিতে পারবেন না। যদি আপনি এটি করেন, '' r 'বা' \ n 'এ ট্রিগার করে আপনি উইন্ডোজ "\ r \ n" এর সমাপ্তির ক্ষেত্রে অতিমাত্রায় খালি লাইনটি শেষ করবেন। এবং এটি গুরুত্বপূর্ণ যে দুটি চরিত্রের উইন্ডোজ বিভাজকটি প্রথমে পরীক্ষা করা উচিত।
AndresRohrAtlasInformatik

281

Line r \ n, \ r বা \ n বিভিন্ন প্ল্যাটফর্মগুলিতে একটি লাইন বিরতি আলাদাভাবে সংজ্ঞায়িত করা হয়।

স্ট্রিংকে বিভক্ত করতে RegExp ব্যবহার করে আপনি তিনটিই match R এর সাথে মেলে

সুতরাং আপনার সমস্যার জন্য:

$array = preg_split ('/$\R?^/m', $string);

উইন্ডোজ, ম্যাক এবং লিনাক্সের সাথে লাইন ব্রেকগুলি মিলবে!


3
আমি এই থ্রেডটিতে গৃহীত উত্তর এবং অন্য কোনও উত্তরগুলির পরিবর্তে এটিও ব্যবহার করেছি। এই মন্তব্যটি কেবল তথ্যবহুল হিসাবে রেখে দেওয়া হচ্ছে।
শেঠ মালাকি

3
আসলে, এটি আমার পক্ষে কার্যকর হয়নি। কখনও কখনও নতুনরেখাগুলি যেখানে এখনও অ্যারে কীগুলিতে উপস্থিত থাকে।
মরিস


32
কেবলমাত্র ব্যবহার করুন$array = preg_split ('/\R/', $string);
জান গোয়েভার্টস

18
মাঝে মাঝে কাজ হচ্ছে না! preg_split("/\r\n|\n|\r/", $string)আরও ভাল পছন্দ
আলেক্সি বি।

34

পিএইচপি ইতিমধ্যে বর্তমান সিস্টেমের নতুন লাইন চরিত্রটি জানে। শুধু EOL ধ্রুবক ব্যবহার করুন।

explode(PHP_EOL,$string)

18
হ্যাঁ, তবে যে কোনও একটি ফাইল সম্পাদনা করতে পারে বা উদাহরণ হিসাবে উদাহরণস্বরূপ উইন্ডোজে একটি ডিবি এন্ট্রি এটি লিনাক্স সিস্টেমে ব্যবহার করতে পারে। আমি মনে করি একটি সাধারণ পদ্ধতি আরও ভাল হবে।
ক্র্যানিও

আমি নিশ্চিত না যে এটি ঠিক আছে। যদি কোনও ওয়েব পৃষ্ঠায় কোনও পাঠ্য ক্ষেত্রটি জমা হয়ে যায়, তবে এটির ব্যবহারকারীর ব্রাউজারের উপর নির্ভর করে বিভিন্ন প্রান্তের অক্ষর থাকতে পারে, সার্ভারের অপারেটিং সিস্টেম নয় not সুতরাং আপনি কী ওএস ব্যবহার করছেন তা বিবেচনা না করেই আপনাকে যে কোনও কিছু পার্স করতে সক্ষম হতে হবে। এটি ধরে নেওয়া হচ্ছে আপনি অবশ্যই ওয়েব স্টাফ করছেন।
চৌম্বক

এরপরে trim()আপনাকে কোনও বহির্মুখী শ্বেতস্থান সরাতে ফলাফলযুক্ত স্ট্রিংগুলি ব্যবহার করতে হতে পারে ।
টিম

30

ডেভিডস উত্তরের একটি বিকল্প যা দ্রুত (দ্রুতগতিতে) দ্রুত ব্যবহার করা str_replaceএবং explode

$arrayOfLines = explode("\n",
                    str_replace(["\r\n","\n\r","\r"],"\n",$str)
            );

যা ঘটছে তা হ'ল:
লাইন ব্রেকগুলি বিভিন্ন রূপে আসতে পারে, তাই আমি str_replaceতার পরিবর্তে and n দিয়ে \ r \ n,, n \ r, এবং \ r (এবং মূল are n সংরক্ষণিত)।
তারপরে বিস্ফোরিত \nহোন এবং আপনার কাছে অ্যারেতে সমস্ত লাইন থাকবে।

আমি এই পৃষ্ঠার এসআরসি-তে একটি মানদণ্ড করেছি এবং লুপের জন্য 1000 বার লাইনগুলি বিভক্ত করেছি এবং:
preg_replace11 সেকেন্ডের
str_replace & explodeগড় নিয়ে প্রায় গড় 1 সেকেন্ড

আমার ফোরামে আরও বিশদ এবং বেনমার্ক তথ্য


আপনার ফোরামের লিঙ্কটি (এবং সম্পূর্ণ ডোমেন) ডাউন বলে মনে হচ্ছে
নিকিতা 웃

19

ডেভিড: দুর্দান্ত দিক, কিন্তু আপনি মিস করেছেন। R এটি আমার পক্ষে কাজ করেছে:

$array = preg_split("/(\r\n|\n|\r)/", $string);

11

নতুন লাইনের মাধ্যমে অ্যারের মধ্যে স্ট্রিংটি সাফল্যের সাথে ভেঙে ফেলার জন্য আপনার প্রেগ_ * ফাংশন বা প্রিগ প্যাটার্ন বা স্ট্রিংয়ের জায়গা ইত্যাদির দরকার নেই। সমস্ত পরিস্থিতিতে, এটি লিনাক্স / ম্যাক বা এম $ হোন, এটি করবে।

<?php 

 $array = explode(PHP_EOL, $string);
 // ...  
 $string = implode(PHP_EOL, $array);

?>

PHP_EOL সার্ভার প্ল্যাটফর্ম দ্বারা ব্যবহৃত লাইন ব্রেক অক্ষর (গুলি) ধরে রাখা একটি ধ্রুবক।


3
ফাইলটি নতুন নতুন লাইন সহ অন্য সিস্টেম থেকে আসতে পারে, বিশেষভাবে নেট জন্য পরিবেশের জন্য পিএইচপি ব্যবহৃত হয়
লুকা সি

ঠিক এই কারণেই এই ধ্রুবকটি বিদ্যমান এবং এই বিশেষ সমস্যাটিকে পরিচালনা করে।
স্পুডি

আপনি যদি উইন্ডোজ থেকে কোনও ফাইল নেন তবে এটি ইউনিক্স, বা ম্যাকের কোনও ফাইলের মতো মেলে না, তাই না?
লুকা সি

আপনি যদি সর্বদা খাঁটি utf-8 ব্যবহার করেন তবে সর্বত্র, সর্বদা, utf8 ফাইলগুলি সাধারণত অন্তর্ভুক্ত থাকে এবং লাইন ব্রেক বিরতি সনাক্তকরণের জন্য আপনার কোড কোডের ভিতরে পিএইচপি_ইওল ছাড়া আপনার আর কিছুই নেই, তবে বর্ণিত হিসাবে এটি মিলবে, এবং কোনও অনুমানিত আচরণ ঘটবে না। মনে রাখবেন যে এটি কেবল আমাকে চিৎকার করে ও দাবি করে না। PHP_EOL ব্যবহারযোগ্যতা যথেষ্ট নিশ্চিত।
স্পুকি

1
আপনার ক্ষেত্রে, যদি সূত্রগুলি অন্য কোথাও থেকে আসে এবং ভালভাবে গঠিত না হয়, যাই হোক না কেন, আপনি আরআর_প্লেস (রেজিপেক্সের চেয়ে দ্রুত) ব্যবহার করা ভাল। ... সব মিলিয়ে তা রেজিপেক্স হোক। বা আরআর_প্লেস বা পিএইচপি_ইওল, একটি পুরানো বাক্য রয়েছে যা বলছে: "যদি এটি কাজ করে - এটি স্পর্শ করবেন না!"। :)
ভুতুড়ে


9

স্ট্যাকওভারফ্লো আমাকে দ্বিধাবিভক্ত উত্তর (যথেষ্ট খ্যাতি নয়) সম্পর্কে মন্তব্য করতে অনুমতি দেবে না, তাই আমি নিজের নিজস্ব যুক্ত করছি ...

$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);

এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে কারণ এটি নেতৃস্থানীয় (দ্বিতীয় * গুলি *) এবং পূর্ববর্তী (প্রথম * গুলি *) সাদা স্থানটি স্বয়ংক্রিয়ভাবে বাদ দেয় এবং ফাঁকা লাইনগুলিও ছেড়ে যায় (PREG_SPLIT_NO_EMPTY পতাকা)।

- = বিকল্প = -

আপনি যদি শীর্ষস্থানীয় হোয়াইটস্পেস রাখতে চান, কেবল দ্বিতীয় * গুলি * থেকে মুক্তি পান এবং এর পরিবর্তে এটি একটি rtrim () করুন ...

$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);

আপনার যদি খালি লাইন রাখতে হয় তবে NULL (এটি কেবলমাত্র একটি স্থানধারক) এবং PREG_SPLIT_NO_EMPTY পতাকাটি থেকে মুক্ত করুন, ...

$array = preg_split('/\s*\R\s*/', trim($text));

বা নেতৃস্থানীয় সাদা স্থান এবং খালি লাইন উভয়ই রাখছেন ...

$array = preg_split('/\s*\R/', rtrim($text));

আপনি কখনই হোয়াইটস্পেসটি অনুসরণ করতে চান তার কোনও কারণ আমি দেখতে পাচ্ছি না, তাই আমি প্রথমে * টি সেখানে রাখার পরামর্শ দিই। তবে, আপনি যদি চান কেবল নতুন লাইনে বিভক্ত হোন (শিরোনাম অনুসারে), এটি এই সহজ (জান গোয়েভার্টস দ্বারা উল্লিখিত) ...

$array = preg_split('/\R/', $text);

mপরিবর্তক সত্যিই প্রয়োজন হয় না তাই না? যে শুধুমাত্র প্রভাবিত করে না ^এবং $?
এমপেইন

@ এমপেন হ্যাঁ, আমি বিশ্বাস করি আপনি সঠিক আছেন। আমি কেবল হিটসেলবমের সংস্করণ সহ এটি বহন করেছি। আমি আমার পোস্ট সম্পাদনা করব।
দীন ফক্সএক্স

7
<anti-answer>

অন্যান্য উত্তরগুলি যেমন সুনির্দিষ্ট করেছে, পিএইচপি 5.3.0 হিসাবে অবমানিত explodeহওয়ার পরিবর্তে ব্যবহার করতে ভুলবেন না । যেমন নীচেরটি আপনি এটি করতে চান না:splitsplit

$your_array = split(chr(10), $your_string);

LF = "\ n" = chr (10), সিআর = "\ r" = chr (13)

</anti-answer>

3

যে কোনও ক্রোনটবে ক্রোনজবস প্রদর্শন করার চেষ্টা করছেন এবং প্রতিটি লাইন কীভাবে পৃথক করবেন সে সম্পর্কে হতাশ হয়ে, বিস্ফোরণটি ব্যবহার করুন:

$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);

'' n 'ব্যবহার করে কাজ করা মনে হয় না তবে chr (10) খুব ভালভাবে কাজ করে: ডি

আশা করি এটি কারও কারও কিছু মাথা ব্যথা বাঁচায়।


হাই জেফ, এসও তে আপনাকে স্বাগতম আপনার অন্য কারও প্রশ্নের উত্তর না দিয়ে প্রশ্ন ও উত্তর হিসাবে এটি পুনরায় লিখতে হবে। এটি একটি প্রশ্নোত্তর সাইট, কোনও সাধারণ ফোরাম নয়। এফএকিউ - এক নজরে
রেবেকা স্কট

ব্যবহার করা কার্যকর '\n'নয় কারণ এস্কেপ সিকোয়েন্সগুলি একক উদ্ধৃতিতে ব্যাখ্যা করা হয় না, এর পরিবর্তে আপনার ডাবল উদ্ধৃতি ব্যবহার করা উচিত: পড়ুন পিএইচপিএন"\n"'n'
ক্রিস্টোফার কে।

2

আপনি এটি ব্যবহার করতে পারেন:

 \str_getcsv($str,PHP_EOL);

2

আপনি একটি স্ট্রিং = nl2br ($ স্ট্রিং) করতে পারেন যাতে আপনার লাইন ব্রেকটি পরিবর্তিত হয়

<br />. 

এই পদ্ধতিতে সিস্টেমটি \ r \ n বা \ n বা \ r ব্যবহার করে তা বিবেচনা করে না

তারপরে আপনি এটিকে একটি অ্যারেতে খাওয়াতে পারবেন:

$array = explode("<br />", $string);

দ্রষ্টব্য: nl2br লাইন ব্রেকগুলি প্রতিস্থাপন করে না ... এটি প্রতিটি লাইন বিরতির আগে কেবল একটি ব্রেক ট্যাগ সন্নিবেশ করে। সুতরাং প্রথম ব্যতীত আপনার অ্যারে আইটেমগুলির সমস্তই একটি লাইন বিরতি দিয়ে শুরু হবে। যদি এটি আপনার পক্ষে গুরুত্বপূর্ণ না হয়, তবে এই পদ্ধতিটি দ্রুততম। যদি তা বিবেচনা করে তবে জাকারের উত্তরটি সবচেয়ে দ্রুত।
আস্ট-

2

এটা আমার পথ:

$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);

এটি সমস্ত খালি লাইনগুলিও এড়িয়ে যাবে।


1
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

foreach ($arr as $line_num => $line) {
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

সত্য অ্যারে:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

$array = array(); // inisiasi variable array in format array

foreach ($arr as $line) { // loop line by line and convert into array
    $array[] = $line;
};

print_r($array); // display all value

echo $array[1]; // diplay index 1

এম্বেড অনলাইন:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>


এই উত্তরটি কীভাবে চলতি সমস্যা সমাধানে
ওপিকে

1

পিএইচপি ডক্সে এটি তুলেছে:

<?php
  // split the phrase by any number of commas or space characters,
  // which include " ", \r, \t, \n and \f

  $keywords = preg_split("/[\s,]+/", "hypertext language, programming");
  print_r($keywords);
?>

0

এই পদ্ধতিটি সর্বদা আমার পক্ষে কাজ করে:

$uniquepattern="gd$#%@&~#"//Any set of characters which you dont expect to be present in user input $_POST['text'] better use atleast 32 charecters.
$textarray=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['text'])));

1
কোডের অংশ হিসাবে শপথ গ্রহণকে ভালবাসুন। :) যাইহোক, rep n এর সাথে প্রতিস্থাপন করা সহজ পাশাপাশি নিরাপদ (অন্যান্য উত্তরগুলি দেখুন)।
স্টিফান রেইচ

0

কেবলমাত্র 'বেস' প্যাকেজ ব্যবহার করা সহজ ক্ষেত্রেও সমাধান:

> s <- "a\nb\rc\r\nd"
> l <- strsplit(s,"\r\n|\n|\r")
> l  # the whole list...
[[1]]
[1] "a" "b" "c" "d"
> l[[1]][1] # ... or individual elements
[1] "a"
> l[[1]][2]
[1] "b"
> fun <- function(x) c('Line content:', x) # handle as you wish
> lapply(unlist(l), fun)

-6

স্ট্রিং বা লাইন ব্রেকের মধ্যে কোনও বিশেষ অক্ষর \nব্যবহার করে পিএইচপি বিস্ফোরিত ব্যবহার করে আমরা এটি অর্জন করতে পারি।

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