Перейти к содержанию

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

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

 

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

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

Поделиться сообщением


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

rtrim (',', $options)

  • +1 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);
?>

 

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От wotanweb
      Всех приветствую. Подскажите, пожалуйста, что делаю не так. Пытаюсь вывести меню следующего вида:
      -Категория 1
      ---производитель 2
      ---производитель 6
      -Категория 2
      ---производитель 3
      ---производитель 5
      ---производитель 2
      -Категория 3
      ---производитель 1

      т.е. под категорией должны появиться производители, содержащиеся в ней. 
      И почти всё получается, кроме одного - во всех категориях выводятся производители, принадлежащие последней категории. 

      В контроллере это выглядит так:
      $categories = $this->model_catalog_category->getCategories(0); foreach ($categories as $category) { if ($category['top']) { // Level 2 $children_data = array(); //1 $children = $this->model_catalog_category->getCategories($category['category_id']); //2 foreach ($children as $child) { //3 $filter_data = array( 'filter_category_id' => $child['category_id'], 'filter_sub_category' => true ); $children_data[] = array( 'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']) ); } // Level 1 $data['categories'][] = array( 'name' => $category['name'], 'children' => $children_data, 'column' => $category['column'] ? $category['column'] : 1, 'href' => $this->url->link('product/category', 'path=' . $category['category_id']) ); //manufacturers menu $manufacturers = $this->model_catalog_category->getManufacturers($category['category_id']); //2 $data['manufacturers'] = array(); //1 foreach ($manufacturers as $manufacturer) { //3 $data['manufacturers'][] = array ( 'manufacturer_id' => $manufacturer['manufacturer_id'], 'thumb' => $manufacturer['image'], 'name' => $manufacturer['name'], 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '&manufacturer_id=' . $manufacturer['manufacturer_id']) ); } } }

      В view так:
       
      <?php foreach ($categories as $category) { ?> <b><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></b> <br> <?php foreach ($manufacturers as $manufacturer) { ?> ---- <a href="<?php echo $manufacturer['href'] ?>"><?php echo $manufacturer['name'] ?> (<?php echo $manufacturer['thumb'] ?>)</a> <br> <?php } ?> <?php } ?>

      Если аналогичным образом делаю для level 2- всё отлично работает. С производителями - никак =( 

      Заранее благодарю за помощь.
    • От grechanyuk
      Добрый день господа! Прошу помощи ибо все перерыл, а ответа не нашел
      Имеем контроллер с простым кодом:
      $resultes = $this->model_catalog_vendorlogo->getVDIBlog($this->request->get['vendor_id']); foreach ($resultes as $result) { $data['blog_data'][] = array( 'title' => $result['title'], 'description' => $result['description'], 'date_added' => $result['date_added'], ); } Модель:
      public function getVDIBlog ($vendor_id) { $query = $this->db->query("SELECT vb.date_added, vbd.title, vbd.description FROM " . DB_PREFIX . "vdi_blog vb LEFT JOIN " . DB_PREFIX . "vdi_blog_description vbd ON (vb.vdi_information_id = vbd.vdi_information_id) WHERE vb.vendor_id = '" . $vendor_id . "'"); return $query->rows; } TPL:
      <center><h3><?php echo $news ?></h3></center> <?php foreach ($blog_data as $blog) { ?> <center><?php echo $blog['title']; ?></center> <?php echo $blog['description']; ?> <?php } ?> Суть в том, чтобы оно выводило пользователю результат нескольких строк, но он не выводит ничего. Если не использовать массив, то выводится одна строка. Помогите, пожалуйста
    • От kolyabis
      Добрый день уважаемые пользователи, обращаюсь к вам за помощью, так как своими силами найти решение не получилось.
      Один SEO-шник сказал нашему директору что товары которых нет в наличии не желательно отключать, так как для ГУГЛА получится что ссылка с товаром мигающая, нам поставили задачу докопаться до массива который выводит товары в категории и немного его подкорректировать.  Корректировки сделать таким образом чтоб товары которые высвечиваются с ценой ( 0 ) убрать со списка.  
       
      Я нашел что массив ( $products ) находится в файле  category.tpl, и перед разбором данного массива дописал скриптик который выдирает все товары у которых  ( $products['price'] ) равен  ( 0 ) 
      Все вроде получилось, но тут я столкнулся с тем что при получении массива товаров по категории идет разбиение на страницы и если в сортировке указать от ( Низкой цены к высокой ) и выводить по 15 товаров, то у меня на первой странице не остается вообще товаров, так как товаров с ценой ( 0 ) у меня больше чем 15 и получается что на первая страница пустая, ну а дальше при переходе на следующую страницу все хорошо отрабатывает.  
      Полазив по CMS я понял что идет разбиение на страницы и при переходе на страница выбирается массив с тем колличеством товаров и сортировкой что указана в фильтре.
       
      Подскажите если кто знает, где формируется SQL массив с товарами где можно былобы указать чтоб выбирал те товары у которых ( price > 0 )
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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