Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

 

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

	 <?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"

Надіслати
Поділитися на інших сайтах

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);
?>

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.