Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

[Решено] Foreach - последняя запятая


Рекомендованные сообщения

Доброго времени суток!

 

Прошу помощи: имею стандартный(почти) массив опций в заказе:

	 <?php foreach ($products as $product) { ?>
	 
	 <?php foreach ($product['option'] as $option) { ?>
	 
	 <?php echo $option['model']; ?>-<?php echo $product['quantity']; ?>,
	 
	 <?php } ?>
	 
	 <?php } ?>

Необходимо разделять каждую итерацию запятой (artikul01 - 2,artikul32 - 4, artikul99 - 7,).

Вопрос: Как избавиться от последней запятой в массиве?)

 

Заранее благодарен за подсказки!

Ссылка на комментарий
Поделиться на других сайтах

1. можно пушнуть в конец массива маркер и проверять в каждой итерации его достижение (ресурсрёмко)

2. можно перед циклом count(), а в цикле счётчик и проверка достижения последнего элемента

3. можно перед циклом array_pop(), потом перебрать стд циклом, а выдранный элемент отобразить отдельно

Ссылка на комментарий
Поделиться на других сайтах


<?php foreach ($products as $product) { ?>

<?php $options = ''; ?>
	 
	 <?php foreach ($product['option'] as $option) { ?>
	 
<?php $options .= $option['model'] . ' - ' . $product['quantity'] . ', '; ?>
	 
	 <?php } ?>

<?php echo preg_replace('/,\s$/', '', $options); ?>

	 <?php } ?>

 

Ссылка на комментарий
Поделиться на других сайтах

В 25.05.2017 в 08:14, ibond сказал:

<?php foreach ($products as $product) { ?>

<?php $options = ''; ?>
	 
	 <?php foreach ($product['option'] as $option) { ?>
	 
<?php $options .= $option['model'] . ' - ' . $product['quantity'] . ', '; ?>
	 
	 <?php } ?>

<?php echo preg_replace('/,\s$/', '', $options); ?>

	 <?php } ?>

 

Спасибо, но тогда удаляются все запятые, т.е. получается "58 - 1 23724 - 1 23726 - 1"

Ссылка на комментарий
Поделиться на других сайтах

9 минут назад, cloudrc сказал:

Спасибо, но тогда удаляются все запятые, т.е. получается "58 - 1 23724 - 1 23726 - 1"

С чего Вы взяли? Как раз удаляем последнюю запятую в строке. Или как chukcha предложил.

 

 

Ссылка на комментарий
Поделиться на других сайтах

21 минуту назад, ibond сказал:

С чего Вы взяли? Как раз удаляем последнюю запятую в строке. Или как chukcha предложил.

 

 

Если содержимое массива известно заранее, т.е.:

<?php $options .= 'Один' . ', ' . 'Два' . ', '; ?>

То последняя запятая удаляется, получаем: "Один, Два". Но вот так:

<?php $options .= $option['model'] . ', '; ?>

Удаляются все запятые, получаем: "58 23724 23726"

Ссылка на комментарий
Поделиться на других сайтах

Если Вы в цикле удаляете, то да.

Ссылка на комментарий
Поделиться на других сайтах

51 минуту назад, chukcha сказал:

rtrim (',', $options)

Вот так вообще ничего не выводится, а так: "rtrim ($options, ',')" тоже удаляются все запятые

Ссылка на комментарий
Поделиться на других сайтах

5 минут назад, cloudrc сказал:

Вот так вообще ничего не выводится, а так: "rtrim ($options, ',')" тоже удаляются все запятые

Обратите внимание на пример. Именно на то место, где идет вывод. Вы в цикле убираете последнюю запятую, а надо после.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

ibond, chukcha, спасибо! Вопрос решился таким путем:

<?php 
foreach ($products as $product) { 
foreach ($product['option'] as $option) { 
$options = '';
$options = $option['model'] . '-' . $product['quantity'] . ','; 
	$html[] = $options;
} 
}
echo rtrim(implode('', $html), ',');
?>

 

Ссылка на комментарий
Поделиться на других сайтах

Простите, но это просто ужасно. :)

Можно обойтись одним implode.

 

<?php 
$html = array();
foreach ($products as $product) { 
  foreach ($product['option'] as $option) { 
    $html[] = $option['model'] . '-' . $product['quantity']; 
  } 
}
echo implode(', ', $html);
?>

 

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.