Я знаю, как перемещаться по элементам массива с помощью 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