পিএইচপি ইমপ্লোড (101) উদ্ধৃতি সহ


115

একটি সাধারণ অ্যারে লাগানো

এই মত দেখতে হবে

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

এবং এটি এই ফিরে আসবে

 lastname,email,phone

দুর্দান্ত, তাই আমি এর পরিবর্তে এটি করতে পারি

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

এবং এখন আমার কাছে একটি সুন্দর সুন্দর সিএসভি স্ট্রিং চাই have

 'lastname','email','phone'

এটি করার আরও ভাল উপায় আছে কি, আমার কাছে মনে হয় ইমপ্লোডের জন্য একটি optionচ্ছিক প্যারামিটার থাকা উচিত আমি কি কিছু মিস করছি?


11
প্রদত্ত উত্তরগুলি "ধীর" হওয়ার বিষয়ে আমি প্রচুর মন্তব্য দেখতে পাচ্ছি। এটা কোন ব্যাপার না । যে উপায়টি আরও পরিষ্কার এবং আরও রক্ষণাবেক্ষণযোগ্য তা চয়ন করুন, পরে যদি কর্মক্ষমতা সম্পর্কে উদ্বিগ্ন হন।
মেটাগার

1
একমাত্র ত্রুটি এটি অ্যারে খালি থাকলে এটি একটি খালি স্ট্রিং উত্পাদন করবে। অর্থাত। সমতুল্য$comma_separated = "''";
স্কিপাইলট

1
দুর্দান্ত সমাধান ম্যাকগ্রিল্ম ... সত্যিই এটির প্রশংসা করুন
সন্দীপ গার্গ

1
ধন্যবাদ @ এমসিগ্রিল্ম, এটি আমার প্রকল্পের জন্য কাজ করছে। সত্যিই এই প্রশংসা।
ওয়াফি আলী

উত্তর:


29

না, আপনি যেভাবে এটি করছেন তা ঠিক আছে। implode()কেবলমাত্র 1-2 প্যারামিটার লাগে (যদি আপনি কেবল একটি অ্যারে সরবরাহ করেন তবে এটি খালি স্ট্রিং দ্বারা টুকরাগুলিতে যোগ দেয়)।


মনে হয় এই সমাধানগুলির মধ্যে কোনও গতির কোনও পার্থক্য নেই আমি কেবল এটি
সর্বদাভাবেই চালিয়ে যাব

163
$array = array('lastname', 'email', 'phone');


echo "'" . implode("','", $array) . "'";

এটি যত তাড়াতাড়ি দ্রুত পায়
জেফজ

এটি আমার জন্য কাজ করে
মাইকি

5
এই সমাধানটি ব্যবহার করার সময় খালি অ্যারের জন্য সন্ধান করুন।
লুইজি

ধন্যবাদ। আমি এই ব্যবহৃত<ul> <li> {!! implode('</li><li>', session('messages')) !!} </li> </ul>
marlo

42

আপনি ব্যবহার করতে পারেন array_map():

function add_quotes($str) {
    return sprintf("'%s'", $str);
}

$csv =  implode(',', array_map('add_quotes', $array));

ডেমো

এছাড়াও মনে রাখবেন যে fputcsvআপনি যদি কোনও ফাইলে লিখতে চান তবে তা রয়েছে।


@ ফেলিক্স ক্লিং আমি কি সন্দেহ করি এটিও ধীর হবে?
mcgrailm

1
@ এমসিগ্রায়েলম, আমি আবার জিজ্ঞাসা করছি: এর চেয়ে ধীর?
নাফতালি ওরফে নীল

2
@ এমসিগ্রাইল্ম: সম্ভবত, আমি আপনাকে একটি বেঞ্চমার্ক তৈরি করার এবং এটির সন্ধান করার পরামর্শ দিচ্ছি;)
ফেলিক্স ক্লিং

@ ফেলিক্স ক্লিং আমি কীভাবে এটি করব?
mcgrailm

1
এই যদি আপনার কোন একক উদ্ধৃতি যা অ্যারে উপাদানের মধ্যে প্রদর্শিত হতে পারে অব্যাহতি অনুমতি যোগ সুবিধা রয়েছে
meagar

29
$ids = sprintf("'%s'", implode("','", $ids ) );

দুর্দান্ত, সহজ এবং সরাসরি।
Vinícius

23

এটি দ্রুত কিনা তা জানেন না, তবে, আপনি আপনার পদ্ধতির সাহায্যে কোডের একটি লাইন সংরক্ষণ করতে পারেন:

থেকে

$array = array('lastname', 'email', 'phone');
$comma_separated = implode("','", $array);
$comma_separated = "'".$comma_separated."'";

প্রতি:

$array = array('lastname', 'email', 'phone');
$comma_separated = "'".implode("','", $array)."'";

এবং আমি আরও করতে পারে যে কিন্তু যেখানে পরিবর্তনশীল $ অ্যারে গত লাইনে হয় অ্যারের সংজ্ঞা নির্বাণ কিন্তু আমি গতি পরিবর্তন তাই সসীম হবে
mcgrailm

8

আপনি যদি লুপগুলি ব্যবহার করতে চান তবে আপনি এটিও করতে পারেন:

$array = array('lastname', 'email', 'phone');
foreach($array as &$value){
   $value = "'$value'";
}
$comma_separated = implode(",", $array);

ডেমো: http://codepad.org/O2kB4fRo


1
@ এমসিগ্রাইল্ম, এর চেয়ে ধীর? এটি মুলত একই জিনিসটি array_mapকিন্তু ব্যবহার না করেইarray_map
নাফতালি ওরফে নীল

আমি বর্তমানে আমার
সিএসভি

@ এমসিগ্রিল্ম @ ফেলিক্সক্লিংয়ের মন্তব্য দেখুন
নাফতালি ওরফে নীল

1
+1 কেবলমাত্র একটি সঠিক উত্তর বলে মনে হচ্ছে - খালি অ্যারে প্রবিষ্ট করার চেষ্টা করার সময় অন্য সমস্ত উত্তর খালি স্ট্রিং তৈরি করবে। এই এক অভ্যাস।
ডেনিস মাটাফোনভ

ধন্যবাদ @ ডেনিসমাতাফোনভ :-)
নাফতালি ওরফে নিল

2

বিকল্পভাবে আপনি যেমন একটি ফাংশন তৈরি করতে পারেন:

function implode_with_quotes(array $data)
{
    return sprintf("'%s'", implode("', '", $data));
}

1

আপনি যদি fopen / fputcsv উপ-সিস্টেমগুলি এড়াতে চান তবে এখানে একটি স্নিপেট রয়েছে যা একটি এসোসিয়েটিভ অ্যারে থেকে পালানো সিএসভি স্ট্রিং তৈরি করে ....

$output = '';
foreach ($list as $row) {
  $output .= '"' . implode('", "', array_values($row)) . '"' . "\r\n";
}

বা অবজেক্টের একটি তালিকা থেকে ...

foreach ($list as $obj) {
  $output .= '"' . implode('", "', array_values((array) $obj)) . '"' . "\r\n";
}

তারপরে আপনি পছন্দসই স্ট্রিং আউটপুট করতে পারেন।



0

আমি মনে করি আপনি এটি করার চেষ্টা করছেন

$array = array('lastname', 'email', 'phone');
echo "'" . implode("','", explode(',', $array)) . "'";

0

আপনার আরে কী প্রয়োজন তা নির্ভর করে আর একটি সম্ভাব্য বিকল্প:

$array = array('lastname', 'email', 'phone');
echo json_encode($array);

এটি স্ট্রিংয়ের চারপাশে '[' এবং ']' রাখবে যা আপনি চাইবেন বা নাও চান।

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