Всем привет!
Как получить и изменить последний элемент foreach?
С такой ситуацией я столкнулся, когда делал заказчику интернет магазин на WordPress, используя плагин Woocomerce. А точнее, мне нужно было исправить уведомительное письмо покупателя в последнем элементе таблицы.
Смотрите скрин.
Было так:
А нужно сделать вот так:
Все это было бы ничего, если весь этот результат не выводился через цикл foreach.
Чтобы не ломать свою голову, решил поискать простое решение в интернете. Но, потеряв много времени на поиск, решил сам что-то сварганить.
Посмотрите простенький пример, прежде чем я покажу код для вордпресс.
Допустим, у вас в файле имеется вот такой код:
<?php $BlogGood_ru["Степка"] = "21.07.1984"; $BlogGood_ru["Макс"] = "01.05.1985"; $BlogGood_ru["Костя"] = "21.03.1984"; $BlogGood_ru["Лида"] = "14.03.1980"; $BlogGood_ru["Маша"] = "21.07.1734"; foreach( $BlogGood_ru as $zvat => $let) { echo "Имя: $zvat, День Рождение: $let <br />"; } ?>
Результат будет:
Итак, как или что нужно сделать, чтобы сделать замену для последней строки:
«Имя: Маша, День Рождение: 21.07.1734»
Решение было вот таким:
<?php $BlogGood_ru["Степка"] = "21.07.1984"; $BlogGood_ru["Макс"] = "01.05.1985"; $BlogGood_ru["Костя"] = "21.03.1984"; $BlogGood_ru["Лида"] = "14.03.1980"; $BlogGood_ru["Маша"] = "21.07.1734"; $countArray = count($BlogGood_ru)-1; // узнаем количество массива и уменьшаем на 1 foreach( $BlogGood_ru as $zvat => $let) { if($countArray==$iii++) // пока счетчик $iii++ не равный с числом количества массивов $countArray, { // вывести последний массив echo "Имя: $zvat, ---Это последний массив-----<br />"; } else { //вывести массивы, кроме последнего echo "Имя: $zvat, День Рождение: $let <br />"; } } ?>
Результат:
Попробую растолковать. Что нужно было сделать?
Посчитал количество элементов массива, используя «count()»и уменьшил число массива на 1:
$countArray = count($BlogGood_ru)-1; // узнаем количество массива и уменьшаем на 1
Далее я буду сравнивать количество элементов массива со счетчиком:
if($countArray==$iii++)
Массив имеет 5 элементов, но так как я 1 отминусовал, значит, значение поменяется на 4.
В итоге выведется 4 элемента, так как есть, а последний 5 правим на свое усмотрение:
{ // вывести последний массив echo "Имя: $zvat, ---Это последний массив-----<br />"; } else { //вывести массивы, кроме последнего echo "Имя: $zvat, День Рождение: $let <br />"; }
Кстати, если захотите поменять значение для третьего элемента, то достаточно отминусовать «3», вот так:
$countArray = count($BlogGood_ru)-3; // узнаем количество массива и уменьшаем на 3
Пример:
<?php $BlogGood_ru["Степка"] = "21.07.1984"; $BlogGood_ru["Макс"] = "01.05.1985"; $BlogGood_ru["Костя"] = "21.03.1984"; $BlogGood_ru["Лида"] = "14.03.1980"; $BlogGood_ru["Маша"] = "21.07.1734"; $countArray = count($BlogGood_ru)-3; // узнаем количество массива и уменьшаем на 1 foreach( $BlogGood_ru as $zvat => $let) { if($countArray==$iii++) // пока счетчик $iii++ не равный с числом количества массивов $countArray, { // вывести последний массив echo "Имя: $zvat, ---Это последний массив-----<br />"; } else { //вывести массивы, кроме последнего echo "Имя: $zvat, День Рождение: $let <br />"; } } ?>
Результат:
Теперь я вернусь к WordPress + WooCommerce.
Я создал в теме папку «woocommerce», а в ней еще одну папку «emails» и перетащил туда стандартный файл «email-order-details.php» с плагина WooCommerce. Если вы тут не поняли, для чего я это сделал, почитайте вот эту статью и все поймете: «Список файлов шаблонов для WooCommerce».
Находим в файле «email-order-details.php» (в том файле, что мы перетащили уже к нашей теме в папку «woocommerce» => «emails» ) вот эту часть кода (примерная строка №64):
if ( $totals ) { $i = 0; foreach ( $totals as $total ) { $i++; ?> <tr> <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th> <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td> </tr> <?php } }
Закомментируйте ее (как закомментировать код, читайте тут).
И вместо стандартного кода WooCommerce вставим наш:
$countArray = count($order->get_order_item_totals())-1; // узнаем количество массива и уменьшаем на 1 foreach($order->get_order_item_totals() as $k=>$total) { if($countArray==$iii++) // пока счетчик $iii++ не равный с числом количества массивов $countArray, { ?> <!-- вывести последний массив --> <tr> <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"> <?php echo wp_kses_post( $total['label'] ); ?> </th> <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"> <?php echo wp_kses_post( $total['value'] ); ?> <br> 55555555555555 </td> </tr> <? } else { ?> <!-- вывести массивы, кроме последнего --> <tr> <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"> <?php echo wp_kses_post( $total['label'] ); ?> </th> <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"> <?php echo wp_kses_post( $total['value'] ); ?> </td> </tr> <? } }
Обратите внимание на строку №78.
Я там поставил цифры «55555555555555», чтобы вы увидели что произойдет, когда пользователь получит письмо о заказе:
Как вы поняли, я смог добавить свой текст в таблицу с итоговой ценой.
Если вам нужно поменять или добавить в таблице «способ оплаты» или «Подытог», достаточно поменять значение в коде на -2 или -3:
$countArray = count($order->get_order_item_totals())-1; // узнаем количество массива и уменьшаем на 1
Придуманный мной код помог мне реализовать подсчет BTC и LTC на сайтах, которые я делал на заказ:
На всякий случай вот макет для woocommerce. Берите и пробуйте:
<?php $countArray = count($order->get_order_item_totals())-1; // узнаем количество массива и уменьшаем на 1 foreach($order->get_order_item_totals() as $k=>$total) { if($countArray==$iii++) // пока счетчик $iii++ не равный с числом количества массивов $countArray, { // вывести последний массив } else { //вывести массивы, кроме последнего } } ?>
Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓
Последние новости категории:
Похожие статьи
Популярные статьи:
-
Как узнать id компьютера
Дата: 29 марта 2013
Прокомментировано:90
просмотров: 330341 -
Размеры форматов листов А0 – А7
Дата: 23 января 2013
Прокомментировано:3
просмотров: 274700 -
Смешные логические загадки с подвохом, отгадки прилагаются
Дата: 12 ноября 2014
Прокомментировано:5
просмотров: 222519 -
Готовые макеты блоков для веб-страниц на HTML и CSS
Дата: 25 июня 2014
Прокомментировано:23
просмотров: 187691 -
Установка windows 7 на ноутбук
Дата: 18 декабря 2012
Прокомментировано:169
просмотров: 186564
3 Ответов на комментарий - Как получить и изменить последний элемент foreach
Добавить комментарий
Метки: php, wordpress, без плагинов, Вебмастеру
В РНР7 уже есть своя заморочка:
Если известны ключи массива и они постоянные, то можно так
Спасибо, Александр за комментарий