मैं एक सरणी से PHP में एक अल्पविराम से अलग सूची कैसे बनाऊं?


113

मुझे पता है कि कैसे आड़ू का उपयोग करके एक सरणी की वस्तुओं के माध्यम से लूप किया जाता है और अल्पविराम को जोड़ा जाता है, लेकिन यह हमेशा अंतिम दर्द को दूर करने के लिए दर्द होता है। वहाँ यह करने का एक आसान PHP तरीका है?

$fruit = array('apple', 'banana', 'pear', 'grape');

अंतत: मुझे चाहिए

$result = "apple, banana, pear, grape"

जवाबों:


231

आप इसके लिए निहितार्थ का उपयोग करना चाहते हैं ।

अर्थात: $commaList = implode(', ', $fruit);


एक अनुगामी होने के बिना अल्पविराम को जोड़ने का एक तरीका है। यदि आप एक ही समय में कुछ अन्य हेरफेर करना चाहते हैं तो आप ऐसा करना चाहते हैं। उदाहरण के लिए, शायद आप प्रत्येक फल को उद्धृत करना चाहते हैं और फिर उन सभी को अल्पविराम द्वारा अलग कर सकते हैं:

$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
    $fruitList .= $prefix . '"' . $fruit . '"';
    $prefix = ', ';
}

इसके अलावा, यदि आप इसे प्रत्येक आइटम के बाद कॉमा लागू करने का "सामान्य" तरीका करते हैं (जैसे कि ऐसा लगता है कि आप पहले कर रहे थे), और आपको पिछले एक को ट्रिम करने की ज़रूरत है, बस करें $list = rtrim($list, ', ')। मैं बहुत से लोगों को अनावश्यक रूप substrसे इस स्थिति में घूमते हुए देखता हूं ।


4
यह अधिक भावना ' "' ( '" $ फल,।, होगा कॉल करने के लिए <code> $ fruitlist =)' " 'फटना।"' (यदि उद्धरण जोड़ने की कोशिश कर); </ code>
cwallenpoole

यदि आप एक स्ट्रिंग में बनाने से पहले सरणी में उस डेटा को हेरफेर करना चाहते हैं तो फॉर्च लूप बेहतर है; उदाहरण के लिए, अतिरिक्त, या mysql_real_escape_string।
नेपाली गिलाद

39

यह मैं कैसे कर रहा है:

$arr = array(1,2,3,4,5,6,7,8,9);

$string = rtrim(implode(',', $arr), ',');

echo $string;

आउटपुट:

1,2,3,4,5,6,7,8,9

लाइव डेमो: http://ideone.com/EWK1XR

EDIT: प्रति @ joseantgv की टिप्पणी, आपको rtrim()उपरोक्त उदाहरण से निकालने में सक्षम होना चाहिए । अर्थात:

$string = implode(',', $arr);

5
जैसा कि ऊपर बताया गया है, आप बस (',', $
गिरफ्तारी

@joseantgv आप सही हैं, मुझे नहीं पता कि मैं क्यों उपयोग करता हूं rtrim()। मुझे याद है कि स्ट्रिंग के अंत में अतिरिक्त कॉमा होने की समस्या है, लेकिन उस स्थिति को याद नहीं कर सकते हैं जहां यह हो रहा था।
नैट

6

andअंत में परिणाम :

$titleString = array('apple', 'banana', 'pear', 'grape');
$totalTitles = count($titleString);
if ($totalTitles>1) {
    $titleString = implode(', ', array_slice($titleString, 0, $totalTitles-1)) . ' and ' . end($titleString);
} else {
    $titleString = implode(', ', $titleString);
}

echo $titleString; // apple, banana, pear and grape

3

लॉयड के जवाब के समान, लेकिन किसी भी आकार के सरणी के साथ काम करता है।

$missing = array();
$missing[] = 'name';
$missing[] = 'zipcode';
$missing[] = 'phone';

if( is_array($missing) && count($missing) > 0 )
        {
            $result = '';
            $total = count($missing) - 1;
            for($i = 0; $i <= $total; $i++)
            { 
              if($i == $total && $total > 0)
                   $result .= "and ";

              $result .= $missing[$i];

              if($i < $total)
                $result .= ", ";
            }

            echo 'You need to provide your '.$result.'.';
            // Echos "You need to provide your name, zipcode, and phone."
        }

3

मैं फॉर लूप में एक IF स्टेटमेंट का उपयोग करना पसंद करता हूं जो यह सुनिश्चित करने के लिए जांचता है कि वर्तमान पुनरावृत्ति सरणी में अंतिम मान नहीं है। यदि नहीं, तो एक अल्पविराम जोड़ें

$fruit = array("apple", "banana", "pear", "grape");

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}

2
यदि कुल संख्या 4 से भिन्न है?
ज्योतिष जू

1

कभी-कभी आपको कुछ उदाहरणों में इसके लिए php की भी आवश्यकता नहीं होती है (उदाहरण के लिए रेंडर पर प्रत्येक आइटम अपने स्वयं के जेनेरिक टैग में हैं) आप हमेशा सभी तत्वों में कॉमा जोड़ सकते हैं, लेकिन अंतिम बच्चे सीएसएस के माध्यम से यदि वे अलग-अलग तत्व प्रदान किए जाने के बाद हैं स्क्रिप्ट से।

मैं वास्तव में कुछ मनमाने कोड वसा को ट्रिम करने के लिए बैकबोन ऐप्स में इसका उपयोग करता हूं:

.likers a:not(:last-child):after { content: ","; }

मूल रूप से तत्व को देखता है, अंतिम तत्व को छोड़कर सभी को लक्षित करता है, और प्रत्येक आइटम के बाद यह एक अल्पविराम जोड़ता है। यदि केस लागू होता है तो स्क्रिप्ट का उपयोग करने का एक वैकल्पिक तरीका नहीं है।



0

एक कार्यात्मक समाधान इस तरह होगा:

$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ','; 

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);

0

इस एक का पालन करें

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

यदि उत्तर दिए गए हैं, तो आप कर सकते हैं

$commaList = '"'.implode( '" , " ', $fruit). '"';

उपरोक्त मानता है कि फल गैर-अशक्त है। यदि आप उस धारणा को नहीं बनाना चाहते हैं तो आप if-if-statement या ternary (? :) ऑपरेटर का उपयोग कर सकते हैं।


-2

एक और तरीका इस तरह हो सकता है:

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

आउटपुट $resultएक अच्छी तरह से स्वरूपित अल्पविराम से अलग की गई सूची है।

a, b, c, d, e, f, g

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

आउटपुट-> ए, बी, सी, डी, ई, एफ, जी

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