Получить последнее непустое значение из массива php

У меня есть обычный массив, состоящий из 5-ти элементов:

$array = array('text1','text2','text3','','');

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

$array = array('text1','text2','text3','text4','text5');
$array = array('text1','text2','','','');

Но мне всегда нужно получать только последний НЕпустой элемент из массива и его индекс в массиве.. Элементов в массивах всегда 5 - пустые и непустые.

Пожалуйста, подскажите как мне это сделать средствами php. Спасибо.


Ответы (1 шт):

Автор решения: Алексей Шиманский

Короткий, но не очень оптимальный вариант: очистить все пустые значения с помощью array_filter и взять последнее через end

$array = array_filter($array);
$lastValue = end($array);

Индекс можно получить спомощью функции key(), которая вернет ключ текущего элемента массива, а текущим, после вызова end(), будет как раз последний.

$clearedArray = array_filter($array);
$lastValue = end($clearedArray);
echo $lastValue; // значение

echo key($clearedArray); // индекс 

Но оптимальнее будет обычным циклом, чтобы перебирать массив только один раз

$lastValue;
$lastValueIndex;

for ($i = count($array); $i > 0; --$i) {
    if (strlen($array[$i])) {
        $lastValue = $array[$i];
        $lastValueIndex = $i;
        break;
    }
}

// или 
//
// $lastValue;
// $lastValueIndex;
// for ($i = count($array); $i > 0; --$i, $lastValueIndex = $i, $lastValue = $array[$i]) {
//      if (!empty($array[$i])) {
//          break;
//      }
//  }    
// 
// или так (но это цикл от начала к концу, что может быть менее выгодно)
//
// $lastValue;
// $lastValueIndex;    
// for ($i = 0; !empty($array[$i]); $lastValueIndex = $i, $lastValue = $array[$i], ++$i);
// echo $lastValue;
// echo $lastValueIndex;
→ Ссылка