Последний не пустой элемент foreach

12 3
D
На сайте с 28.06.2008
Offline
976
691

Есть цикл который выводит данные экзаменов для школы

<?php
$n = 0;
foreach($this->exam as $year => $value)
{
if(!empty($value))
{
?>
<div class="<?php echo ($n % 2 == 0)?'even':'odd'; ?>">
<?php echo $year; ?> г.
<div style="float: right;"><?php echo $this->rate[$year]; ?></div>
</div>
<?php
}
$n++;
}

?>

В результате получаю

2010 г. 1 место в Центральном районе / 4 место в городе
2011 г. 1 место в Центральном районе / 4 место в городе
2012 г. 1 место в Центральном районе / 3 место в городе
2013 г. 1 место в Центральном районе / 3 место в городе
2014 г. 1 место в Центральном районе / 3 место в городе
2015 г. 1 место в Центральном районе / 1 место в городе
2017 г. 1 место в Центральном районе / 2 место в городе
2018 г. 1 место в Центральном районе / 2 место в городе

Мне нужно в одном месте вывести последнюю строчку этого цикла

попробовал сделать так

if(!empty($value)&& !next($this->exam))

Но получил

2015 г. 1 место в Центральном районе / 1 место в СПб

вероятно оно споткнулось об 2016 год - где данные - NULL

Как получить последнюю строчку цикла где есть данные и они не пустые?

R
На сайте с 27.02.2016
Offline
30
#1
Dram:

Как получить последнюю строчку цикла где есть данные и они не пустые?

Переместить $n++ в условие:


if(!empty($value))
{
...
$n++;
}

Он и будет последним элементом вашего цикла.

S
На сайте с 30.09.2016
Offline
459
#2

Либо end(), либо key(), либо просто последний элемент из foreach(), - в зависимости от поставленной задачи.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
D
На сайте с 28.06.2008
Offline
976
#3

Ravel, попробовал по вашему не получилось, сделал так

<?php
foreach($this->exam as $year => $value)
{
if(!empty($value))
{
$lastGod = $year;
$lastMesto = $this->rate[$year];
}
}
var_dump($lastMesto);
var_dump($lastGod);
?>
R
На сайте с 27.02.2016
Offline
30
#4
Dram:
Ravel, попробовал по вашему не получилось, сделал так

покажите var_dump($this->exam);

D
На сайте с 28.06.2008
Offline
976
#5

Я уже все сделал спс, че то затупил, думал там сложно. А достаточно ведь выйти из цикла и всегда будешь получать последний элемент.

Gerga
На сайте с 02.08.2015
Offline
89
#6
Dram:
Как получить последнюю строчку цикла где есть данные и они не пустые?


// очистка массива
$exam = array_diff($this->exam, array(''));

// пример получения ключа и последнего элемента массива
$value = end($exam);
$key = key($exam);

Перед запуском цикла, массив можете обработать функцией array_diff, чтобы удалить пустые элементы, тогда вам не нужно будет условие if(!empty($value)).

А еще лучше, чтобы в $this->exam и $this->rate хранить уже очищенные массивы.

---------- Добавлено 24.08.2019 в 11:04 ----------

Dram:
class="<?php echo ($n % 2 == 0)?'even':'odd'; ?>"

И забудьте это :)

Я так делал, когда не знал, что есть псевдокласс :nth-child(odd | even | <число> | <выражение>)

M
На сайте с 04.12.2013
Offline
181
#7
Gerga:
Я так делал, когда не знал, что есть псевдокласс :nth-child(odd | even | <число> | <выражение>)

Некоторые так делают, даже когда знают :)

Хостинг FOZZY (http://fozzy.com.ru) / Выслушаю предложения на домены (http://u75.ru/domains-for-sale) / Домены и скрипт для коротких ссылок (http://u75.ru/domains-for-shortcuts)
S
На сайте с 30.09.2016
Offline
459
#8
Gerga:

И забудьте это :)

Вопрос предпочтения. И конкретной ситуации.

Gerga
На сайте с 02.08.2015
Offline
89
#9
Sitealert:
Вопрос предпочтения. И конкретной ситуации.

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

https://caniuse.com/#feat=css-sel3

---------- Добавлено 24.08.2019 в 14:24 ----------

Gerga:
поддерживать очень старые браузеры

что собственно говоря уже не практикуется, у меня так точно. В последний раз, когда требовалась поддержка IE9 и выше, было пару лет назад, точно не помню сколько, и то, я отказался от этого заказа.

S
На сайте с 30.09.2016
Offline
459
#10
Gerga:
другой практической пользы не вижу в этом.

Это не означает, что её не может быть. Вопрос оптимизации кода и работы по программированию. Иногда удобнее один вариант, иногда - другой. Нафига мне, например, прописывать в CSS 100500 стилей для разных элементов, если я могу прописать 1 или 2 класса и больше этот файл не дёргать?

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий