Как я могу предотвратить вставку запятой в конце 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>
Почему бы просто не сделать implode( ',', $_POST['titles'])? Тогда вам вообще не придется беспокоиться о последней запятой.
С substr? @PatrickQ
Как уже говорилось в других ответах, вы можете сделать это через implode() для своего варианта использования. Для других, которые могут иметь дело с многомерным массивом и не могут этого сделать, используйте for-each для построения строки в переменной, а затем пропустите строку через trim(), чтобы избавиться от любого конечного пробела или другого указанного символа ( как запятая)






просто используйте 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 ',';}
}
Это данные формы.
@PatrickQ не могли бы вы рассказать об этом подробнее? мне это кажется прекрасным.
"что эквивалентно .join ()" - в чем смысл этого утверждения?
@ user1597430 просто сравнил синтаксис Java / JavaScript ... и обновил мой ностальгический синтаксис до текущего порядка аргументов.
@JavaOgreniyor, кажется, вы путаете ввод и вывод? что HTML также недействителен. форма HTMLselect имеет только одно значение результата; titles[] не имеет смысла. см. w3.org/TR/html5/sec-forms.html#the-select-element ... по одному вопросу на вопрос, пожалуйста.
HTML Только пример - я имею в виду, это данные формы. Итак, формат массива. Я не могу использовать implode@JavaOgreniyor, несмотря на то, что я не понимаю, почему это не должно быть возможным для implode() и array ... Я добавил примерный цикл, который делает примерно то же самое. эта закомментированная строка примет строку в качестве ввода. не забудьте добавить атрибут multiple = "multiple" к элементу select. пост-исправление имени с помощью [] должно автоматически преобразовать его в array. надеюсь, это объясняет это достаточно хорошо.
Вместо этого вам следует использовать implode.
$string = implode(',', $_POST['titles']);
(Документы предлагают использовать аналогичный порядок аргументов разнесения.)
похоже, вы можете вообще пропустить foreach и просто сделать это:
echo implode(',',$_POST['titles']);
Я согласен с другими ответами - implode () - это путь. Но если вы не хотите / продолжать путь, по которому идете ...
$output = "";
foreach ($_POST['titles'] AS $title) {
$output .= "{$title},";
};
echo substr($output, 0, -1);
Просто удалите последний символ результата после foreach