PHP diziden virgülle ayrılmış listesi oluşturmak nasıl?

8 Cevap php

Ben bir virgül ekleme nasıl foreach kullanarak dizideki öğeleri döngü ve biliyorum, ama her zaman son virgülü çıkarmak zorunda bir ağrı var. Bunu yapmanın kolay bir PHP yolu var mı?

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

Sonuçta ben istiyorum

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

8 Cevap

Bunun için implode kullanmak istiyorum.

ie: $commaList = implode(', ', $fruit);


Bir sondaki bir kalmadan virgül eklemek için bir yolu yoktur. Eğer aynı zamanda bazı başka manipülasyon yapmak varsa bunu yapmak isterdim. Örneğin, belki her meyve alıntı ve sonra virgülle hepsini ayırmak istiyorum:

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

Ayrıca, sadece bunu (bunu daha önce yaptıklarını sesler gibi) her öğeden sonra bir virgül ekleme "normal" bir şekilde yapmak ve sadece yapmak, sonuncusu keserek gerekiyorsa $list = rtrim($list, ', '). Ben bir sürü insan gereksiz yere bu durumda substr mucking bkz.

Bu bunu yapıyor oldum nasıl:

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

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

echo $string;

Çıktı:

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

Canlı Demo: http://ideone.com/EWK1XR

Ben mevcut yineleme dizideki son değer olmadığından emin olmak için denetler FOR döngü içinde IF deyimini kullanmayı tercih. Değilse, bir virgül eklemek

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

For ($i = 0; $i <= 3; $i++)
  {echo "$fruit[$i]";
  If ($i < 3)
  echo ", ";
  }

Alıntı cevapları yapıyor, yapabilirsiniz

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

Yukarıdaki meyve boş olmayan olduğunu varsayar. Eğer bu varsayım yapmak istemiyorsanız bir if-then-else deyimi veya üçlü (? :) Operatörü kullanabilirsiniz.

Lloyd'un cevap benzer, ancak herhangi bir boyut dizi ile çalışır.

$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."
        }

Bazen bile bunlar ayrı elemanları ise her zaman hale getirildikten sonra css ile tüm unsurları ancak son çocuk için virgül ekleyebilirsiniz (Liste öğeleri her örneğin işlemek kendi jenerik etiketi olan) bazı durumlarda bunun için php gerekmez script.

Ben omurgasında bir çok bazı rasgele kod yağ kırpmaya aslında apps bu kullanın:

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

Temelde, eleman bakar geçen element dışındaki tüm hedefler ve her öğeden sonra bir virgül ekler. Sadece alternatif bir yol durum geçerli ise tüm komut dosyası kullanmak zorunda değil.

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

çıkış> a, b, c, d, e, f, g

Başka bir yol bu gibi olabilir:

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

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

$result çıkış bir güzel biçimlendirilmiş virgülle ayrılmış listesi.

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