Come creare una list separata da virgola da arrays in PHP?

So come passare in rassegna gli elementi di un arrays usando foreach e aggiungere una virgola, ma è sempre un dolore wherer decollare la virgola finale. C'è un modo semplice per farlo in PHP?

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

In definitiva, voglio

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

Vuoi usare implode per questo.

es .: $commaList = implode(', ', $fruit);


C'è un modo per aggiungere virgole senza averne uno finale. Dovresti farlo se devi fare qualche altra manipolazione allo stesso tempo. Ad esempio, potresti voler citare each frutto e poi separarli tutti con delle virgole:

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

Inoltre, se lo fai, il modo "normale" di aggiungere una virgola dopo each elemento (come sembra che avresti fatto prima), e devi tagliare l'ultimo, basta fare $list = rtrim($list, ', ') . Vedo un sacco di persone inutilmente che si aggirano con il substr in questa situazione.

È così che l'ho fatto:

 $arr = arrays(1,2,3,4,5,6,7,8,9); $string = rtrim(implode(',', $arr), ','); echo $string; 

Produzione:

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

Demo dal vivo: http://ideone.com/EWK1XR

EDIT: Per @ commento di joseantgv, dovresti essere in grado di rimuovere rtrim() dall'esempio precedente. Vale a dire:

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

Per gli sviluppatori che desiderano get risultati and alla fine possono utilizzare il seguente codice:

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

Preferisco utilizzare un'istruzione IF nel ciclo FOR che verifica che l'iterazione corrente non sia l'ultimo valore dell'arrays. In caso contrario, aggiungi una virgola

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

Simile alla risposta di Lloyd, ma funziona con qualsiasi arrays di size.

 $missing = arrays(); $missing[] = 'name'; $missing[] = 'zipcode'; $missing[] = 'phone'; if( is_arrays($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." } 

A volte non hai nemless bisogno di PHP per questo in certi casi (gli elementi di list sono ciascuno nel proprio tag generico sul rendering, ad esempio) Puoi sempre aggiungere virgole a tutti gli elementi ma ultimo figlio tramite css se sono elementi separati dopo il rendering dalla sceneggiatura.

Lo uso spesso in app per backbone per tagliare un certo numero di grassi arbitrari:

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

Praticamente guarda l'elemento, bersaglia tutti tranne l'ultimo elemento, e dopo each elemento aggiunge una virgola. Solo un modo alternativo per non wherer utilizzare lo script se si applica il caso.

Una soluzione funzionale sarebbe come questa:

 $fruit = arrays('apple', 'banana', 'pear', 'grape'); $sep = ','; arrays_reduce( $fruits, function($fruitsStr, $fruit) use ($sep) { return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit); }, '' ); 
 $fruit = arrays('apple', 'banana', 'pear', 'grape'); $commasaprated = implode(',' , $fruit); 

Se fai delle risposte citate, puoi farlo

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

quanto sopra presuppone che il frutto non sia nullo. Se non vuoi fare questa ipotesi puoi usare un'istruzione if-then-else o ternaria (? :).

Un altro modo potrebbe essere così:

 $letters = arrays("a", "b", "c", "d", "e", "f", "g"); $result = substr(implode(", ", $letters), 0, -3); 

L'output di $result è un elenco ben separato da virgole.

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

output-> a, b, c, d, e, f, g