Удалить последнюю часть запятой в foreach в PHP?

Как я могу предотвратить вставку запятой в конце title3?

foreach ($_POST['titles'] AS $title) {
    echo "{$title},";
}; 

Результат:

title1,title2,title3,

Обновлять: Это данные формы, это массив. Не ходи сюда; title1,title2,title3,

<form>
<select name = "titles[]">
<option>title1</title>
<option>title2</title>
<option>title3</title>
<option>title4</title>
</select>
</form>

Просто удалите последний символ результата после foreach

Patrick Q 10.12.2018 22:24

Почему бы просто не сделать implode( ',', $_POST['titles'])? Тогда вам вообще не придется беспокоиться о последней запятой.

jfadich 10.12.2018 22:25

С substr? @PatrickQ

JavaOgreniyor 10.12.2018 22:25

Как уже говорилось в других ответах, вы можете сделать это через implode() для своего варианта использования. Для других, которые могут иметь дело с многомерным массивом и не могут этого сделать, используйте for-each для построения строки в переменной, а затем пропустите строку через trim(), чтобы избавиться от любого конечного пробела или другого указанного символа ( как запятая)

ivanivan 10.12.2018 23:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
93
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

просто используйте implode() - эквивалент .join():

echo implode(',', $_POST['titles']);

или просто:

echo implode($_POST['titles']);

если вы действительно хотите использовать цикл - для определения последнего элемента требуется индекс. цикл foreach не предоставляет никакого индекса для сравнения; поэтому петля for вполне подходит:

// $titles = explode(',', $_POST['titles']);
$titles = $_POST['titles'];
for($i=0; $i < sizeof($titles); $i++) {
    echo $titles[$i];
    if ($i+1 != sizeof($titles)){echo ',';}
}

Это данные формы.

JavaOgreniyor 10.12.2018 22:28

@PatrickQ не могли бы вы рассказать об этом подробнее? мне это кажется прекрасным.

Martin Zeitler 10.12.2018 22:29

"что эквивалентно .join ()" - в чем смысл этого утверждения?

user1597430 10.12.2018 22:30

@ user1597430 просто сравнил синтаксис Java / JavaScript ... и обновил мой ностальгический синтаксис до текущего порядка аргументов.

Martin Zeitler 10.12.2018 22:35

@JavaOgreniyor, кажется, вы путаете ввод и вывод? что HTML также недействителен. форма HTMLselect имеет только одно значение результата; titles[] не имеет смысла. см. w3.org/TR/html5/sec-forms.html#the-select-element ... по одному вопросу на вопрос, пожалуйста.

Martin Zeitler 10.12.2018 22:37
HTML Только пример - я имею в виду, это данные формы. Итак, формат массива. Я не могу использовать implode
JavaOgreniyor 10.12.2018 22:41

@JavaOgreniyor, несмотря на то, что я не понимаю, почему это не должно быть возможным для implode() и array ... Я добавил примерный цикл, который делает примерно то же самое. эта закомментированная строка примет строку в качестве ввода. не забудьте добавить атрибут multiple = "multiple" к элементу select. пост-исправление имени с помощью [] должно автоматически преобразовать его в array. надеюсь, это объясняет это достаточно хорошо.

Martin Zeitler 10.12.2018 22:54

Вместо этого вам следует использовать implode.

$string = implode(',', $_POST['titles']);

(Документы предлагают использовать аналогичный порядок аргументов разнесения.)

Progrock 10.12.2018 23:39

похоже, вы можете вообще пропустить foreach и просто сделать это:

echo implode(',',$_POST['titles']);

Я согласен с другими ответами - implode () - это путь. Но если вы не хотите / продолжать путь, по которому идете ...

$output = "";
foreach ($_POST['titles'] AS $title) {
    $output .= "{$title},";
};
echo substr($output, 0, -1);

Другие вопросы по теме