Получить последнее непустое значение из массива 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;