Как мне создать разделенный запятыми список из массива в PHP?
Я знаю, как перебирать элементы массива с помощью foreach и добавлять запятую, но всегда сложно избавиться от последней запятой. Есть ли простой способ сделать это на PHP?
$fruit = array('apple', 'banana', 'pear', 'grape');
В конечном итоге я хочу
$result = "apple, banana, pear, grape"
Ответы
Ответ 1
Вы хотите использовать implode для этого.
а именно:
$commaList = implode(', ', $fruit);
Существует способ добавления запятых без конечного. Вы хотите сделать это, если вам придется делать некоторые другие манипуляции одновременно. Например, возможно, вы хотите процитировать каждый фрукт, а затем разделить их запятыми:
$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
$fruitList .= $prefix . '"' . $fruit . '"';
$prefix = ', ';
}
Кроме того, если вы просто сделаете это "обычным" способом добавления запятой после каждого элемента (как будто это звучит так, как вы делали раньше), и вам нужно обрезать последний, просто $list = rtrim($list, ', ')
. В этой ситуации я вижу много людей, которые излишне сбрасывают с помощью substr
.
Ответ 2
Вот как я это делал:
$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
Live Demo: http://ideone.com/EWK1XR
EDIT: В комментарии @joseantgv вы можете удалить rtrim()
из приведенного выше примера. То есть:
$string = implode(',', $arr);
Ответ 3
Результат с 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
Ответ 4
Я предпочитаю использовать оператор IF в цикле FOR, который проверяет, чтобы текущая итерация не была последним значением в массиве. Если нет, добавьте запятую
$fruit = array("apple", "banana", "pear", "grape");
for($i = 0; $i < count($fruit); $i++){
echo "$fruit[$i]";
if($i < (count($fruit) -1)){
echo ", ";
}
}
Ответ 5
Подобно Lloyd, но работает с любым размером массива.
$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."
}
Ответ 6
Иногда вам даже не нужен php для этого в определенных случаях (например, элементы списка в своем собственном теге для рендеринга). Вы всегда можете добавлять запятые ко всем элементам, но last-child через css, если они являются отдельными элементами после визуализации из script.
Я использую это много в базовых приложениях, чтобы обрезать какой-то произвольный код:
.likers a:not(:last-child):after { content: ","; }
В основном ищет элемент, цели все, кроме последнего элемента, и после каждого элемента добавляет запятую. Просто альтернативный способ не использовать script вообще, если дело применяется.
Ответ 7
$fruit = array('apple', 'banana', 'pear', 'grape');
$commasaprated = implode(',' , $fruit);
Ответ 8
Функциональное решение будет выглядеть следующим образом:
$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ',';
array_reduce(
$fruits,
function($fruitsStr, $fruit) use ($sep) {
return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
},
''
);
Ответ 9
Если вы делаете цитируемые ответы, вы можете сделать
$commaList = '"'.implode( '" , " ', $fruit). '"';
вышесказанное предполагает, что плоды не равны нулю. Если вы не хотите делать это предположение, вы можете использовать оператор if-then-else или тройной (?:) оператор.
Ответ 10
Другой способ может быть таким:
$letters = array("a", "b", "c", "d", "e", "f", "g");
$result = substr(implode(", ", $letters), 0, -3);
Вывод $result
- это прекрасно отформатированный список, разделенный запятой.
a, b, c, d, e, f, g
Ответ 11
$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