Как создать список с запятыми из массива в PHP?

Я знаю, как перемещаться по элементам массива с помощью foreach и добавлять запятую, но всегда приходится снимать последнюю запятую. Есть ли простой способ PHP сделать это?

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

В конечном итоге я хочу

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

Вы хотите использовать implode для этого.

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


Существует способ добавления запятых без конечного. Вы хотите сделать это, если вам придется делать некоторые другие манипуляции одновременно. Например, возможно, вы хотите процитировать каждый фрукт, а затем разделить их все запятыми:

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

Кроме того, если вы просто сделаете это «обычным» способом добавления запятой после каждого элемента (как будто это звучит так, как вы делали раньше), и вам нужно обрезать последнее, просто сделайте $list = rtrim($list, ', ') . В этой ситуации я вижу много людей, которые излишне сбрасывают с помощью substr .

Вот как я это делал:

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

Для разработчика, который хочет получить результат 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 

Я предпочитаю использовать оператор IF в цикле FOR, который проверяет, чтобы текущая итерация не была последним значением в массиве. Если нет, добавьте запятую

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

Подобно ответу Ллойда, но работает с любым размером массива.

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

Иногда вам даже не требуется php для этого в определенных случаях (элементы списка каждый из них имеют свой собственный общий тег при визуализации, например). Вы всегда можете добавлять запятые ко всем элементам, но last-child через css, если они являются отдельными элементами после визуализации из сценария.

Я использую это много в базовых приложениях, чтобы обрезать какой-то произвольный код:

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

В основном смотрит на элемент, цели все, кроме последнего элемента, и после каждого элемента добавляет запятую. Просто альтернативный способ не использовать сценарий вообще, если дело применяется.

Функциональное решение будет выглядеть следующим образом:

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

Если вы делаете цитируемые ответы, вы можете сделать

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

вышесказанное предполагает, что плоды не равны нулю. Если вы не хотите делать это предположение, вы можете использовать оператор if-then-else или тройной (? 🙂 оператор.

Другой способ может быть следующим:

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

Результат $result – это прекрасно отформатированный список, разделенный запятыми.

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

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