Всем привет!
Как получить и изменить последний элемент 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, без плагинов, Вебмастеру


Поиск слова в файлах (txt, html, php и т.д.), используя PHP
Как узнать путь к файлу на хостинге (PHP)
Как проверить наличие файла, если он на PHP?
Как сделать ротатор баннеров на php
Отличный WordPress плагин для рекламы
Как узнать содержимое value тега input – JavaScript
Как вывести последние записи из определенной категории на WordPress

В РНР7 уже есть своя заморочка:
Если известны ключи массива и они постоянные, то можно так
Спасибо, Александр за комментарий