BloGGood.ru

Блог Костаневича Степана

До Нового Года осталось:

Блог на разные темы, seo-оптимизация, раскрутка сайта, создание сайта, вкусные эффекты для сайта и многое другое…

Главная » Php приемчики » Как получить и изменить последний элемент foreach

Как получить и изменить последний элемент foreach

2018-09-19 / Вр:23:41 / просмотров: 160

Всем привет!
Как получить и изменить последний элемент foreach?
С такой ситуацией я столкнулся, когда делал заказчику интернет магазин на WordPress, используя плагин Woocomerce. А точнее, мне нужно было исправить уведомительное письмо покупателя в последнем  элементе таблицы.
Смотрите скрин.
Было так:

Как получить и изменить последний элемент foreach

А нужно сделать вот так:

Как получить и изменить последний элемент foreach

Все это было бы ничего, если весь этот результат не выводился через цикл 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 />";
}
?>

Результат будет:Цикл Foreach на PHP

Итак, как или что нужно сделать, чтобы сделать замену для последней строки:

«Имя: Маша, День Рождение: 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 />";
}
}
?>

Результат:

Как получить и изменить последний элемент foreach

Попробую растолковать. Что нужно было сделать?
Посчитал количество элементов массива, используя «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 />";
}
}
?>

Результат:

Как получить и изменить последний элемент foreach

Теперь я вернусь к 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», чтобы вы увидели что произойдет, когда пользователь получит письмо о заказе:

Как получить и изменить последний элемент foreach

Как вы поняли, я смог добавить свой текст в таблицу с итоговой ценой.
Если вам нужно поменять или добавить в таблице «способ оплаты» или «Подытог», достаточно поменять значение в коде на -2 или -3:

$countArray = count($order->get_order_item_totals())-1; // узнаем количество массива и уменьшаем на 1

Придуманный мной код помог мне реализовать подсчет BTC и LTC на сайтах, которые я делал на заказ:

Как получить и изменить последний элемент foreach

На всякий случай вот макет для 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
{
//вывести массивы, кроме последнего
}
}
?>

Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓

Получай обновления блога!!! Подпишись:

Популярные статьи:

Добавить комментарий

;-) :| :x :twisted: :smokes: :smile: :shock: :sad: :rose: :roll: :razz: :pop-corne: :oops: :o :mrgreen: :lol: :idea: :grin: :gazeta: :evil: :cry: :cool: :coffe: :arrow: :???: :?: :!:

Чтобы добавить в комментарий код HTML, PHP, CSS, JavaScript, нужно сделать так: [code] ваш код [/code]

Метки: , , ,

Мои цели на 2018-2019:

1). Закончить тему «Bootstrap»

2). Закончить тему «Все про PHP и MySQL»

3). Создать портфолио и мини интернет-магазин шаблонов

4). Довести количество статей до 800

5). Добиться посещаемости 3000 человек/сутки

6). Увеличить число подписчиков до 250

Статистика по блогу

Количество записей на блоге: 797
Количество страниц на блоге: 20
Количество рубрик на блоге: 28
Количество меток на блоге: 72
Количество комментариев на блоге: 4419