Я часто использую следующее для получения предпоследнего значения в массиве:
$z=array_pop(array_slice($array,-2,1));
Я пропускаю функцию php, чтобы сделать это сразу, или это является лучшим, я имею?
end($array);
$z = prev($array);
Это более эффективно, чем ваше решение, поскольку оно полагается на внутренний указатель массива. Ваше решение делает ненужную копию массива.
Для численно индексированных последовательных массивов попробуйте $ z = $ array [count ($ array) -2];
Изменить: для более общий вариант, посмотрите ответ Artefecto.
Или вот, должно работать.
$reverse = array_reverse( $array );
$z = $reverse[1];
Я использую это, если мне это нужно :)