php implode (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."'";

और अब मेरे पास वही है जो मुझे एक अच्छा सुंदर सीएसवी स्ट्रिंग चाहिए

 'lastname','email','phone'

क्या ऐसा करने का एक बेहतर तरीका है, यह मुझे लगता है कि जैसे कि मुझे कुछ याद आ रहा है, क्या मुझे फंसाने के लिए एक वैकल्पिक पैरामीटर होना चाहिए?


11
मैं प्रदान किए गए उत्तरों के बारे में बहुत सारी टिप्पणियां देख रहा हूं जो "धीमी" हैं। इससे कोई फर्क नहीं पड़ता । वह तरीका चुनें जो स्पष्ट और अधिक सुव्यवस्थित हो, बाद में प्रदर्शन के बारे में चिंता करें, यदि बिल्कुल भी।
meagar

1
एकमात्र दोष यह है कि एक खाली स्ट्रिंग का उत्पादन होगा यदि सरणी खाली है। अर्थात। समतुल्य$comma_separated = "''";
स्काइपिलॉट

1
महान समाधान mcgrailm ... वास्तव में इसकी सराहना करते हैं
संदीप गर्ग

1
धन्यवाद @mcgrailm, यह मेरी परियोजनाओं के लिए काम कर रहा है। वास्तव में इस की सराहना करते हैं।
वाफी अली

जवाबों:


29

नहीं, जिस तरह से आप कर रहे हैं वह ठीक है। implode()केवल 1-2 पैरामीटर लेता है (यदि आप सिर्फ एक सरणी की आपूर्ति करते हैं, तो यह एक खाली स्ट्रिंग द्वारा टुकड़ों में शामिल हो जाता है)।


ऐसा लगता है कि इन समाधानों में से किसी में भी कोई अंतर नहीं है, मैं बस इसे वैसे ही करता रहूंगा जैसे मेरे पास हमेशा होता है, हर मदद के लिए धन्यवाद
mcgrailm

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
@mcgrailm, मैं फिर से पूछता हूं: क्या की तुलना में धीमी?
नफतली उर्फ ​​नील

2
@mcgrailm: हो सकता है, मेरा सुझाव है कि आप एक बेंचमार्क बनाएं और पता करें;)
फेलिक्स क्लिंग

@ फेलिक्स क्लिंग मैं कैसे करूँ?
mcgrailm

1
यह आपको किसी भी एकल उद्धरण जो सरणी तत्वों में प्रकट हो सकता से बचने के लिए अनुमति देने के अतिरिक्त लाभ है
meagar


23

नहीं पता कि यह जल्दी है, लेकिन, आप अपने तरीके के साथ कोड की एक पंक्ति को बचा सकते हैं:

से

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

सेवा:

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

और मैं इसे आगे बढ़ा सकता हूं लेकिन सरणी की परिभाषा जहां चर $ सरणी अंतिम पंक्ति में है, लेकिन मैं गति को इतना सीमित
रखूंगा

8

यदि आप लूप का उपयोग करना चाहते हैं तो आप भी कर सकते हैं:

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

डेमो: http://codepad.org/O2kB4fRo


1
@mcgrailm, क्या की तुलना में धीमी? इसका मूल रूप से एक ही चीज़ के रूप में array_mapउपयोग किए बिनाarray_map
Naftali उर्फ ​​नील

जिस तरह से मैं वर्तमान में अपने सीएसवी स्ट्रिंग
mcgrailm

@mcgrailm @ FelixKling की टिप्पणी देखें
Naftali उर्फ ​​नील

1
+1 केवल एक सही उत्तर लगता है - अन्य सभी उत्तर खाली स्ट्रिंग का उत्पादन करेंगे जब खाली सरणी को फंसाने की कोशिश करेंगे। यह एक अभ्यस्त है।
डेनिस माताफोनोव

धन्यवाद @DenisMatafonov :-)
Naftali उर्फ ​​नील

2

वैकल्पिक रूप से आप ऐसा फ़ंक्शन बना सकते हैं:

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

1

यदि आप यहाँ fopen / fputcsv उप-प्रणालियों से बचना चाहते हैं, तो एक स्निपेट है जो एक साहचर्य सरणी से एक बचा हुआ CSV स्ट्रिंग बनाता है ...।

$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);

यह स्ट्रिंग के चारों ओर '[' और '] डाल देगा, जो आप चाहें या न चाहें।

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