10

array_pop() removes it from the array. end() changes the internal pointer.

Is the only way really some cludge like:

$my_array[array_pop(array_keys($my_array))];

?

1
  • To be fair, what's at the end is arbitrary based on your keys. Commented Sep 20, 2011 at 19:44

6 Answers 6

25

This works:

list($end) = array_slice($array, -1);

array_slice($array, -1) returns an array with just the last element and list() assigns the first element of slice's result to $end.

@Alin Purcaru suggested this one in comments:

$end = current(array_slice($array, -1));

Since PHP 5.4, this works too:

array_slice($array, -1)[0]
Sign up to request clarification or add additional context in comments.

3 Comments

What about $end = current(array_slice($array, -1)); instead of the list approach for getting the only element of an array?
Cool thanks. I was hoping there was some function or approach I wasn't finding.
Unfortunately list($end) = array_slice($array, -1); doesn't work with associative arrays. So I use function pop_array_nondestructive( $array ) { return end($array); }
3

Erm... what about reset()ting after you use end()?

$lastItem = end($myArr);
reset($myArr);

2 Comments

because it changes the internal pointer and OP seems to not want to change the internal pointer ? :)
@arnaud I'm aware that it resets the pointer, but at least it puts it at the beginning which is the default. Your solution would be more appropriate for not resetting it at all.
0

Unfortunately

list($end) = array_slice($array, -1);

doesn't work with associative arrays. So I use

function pop_array_nondestructive( $array )
    {
    return end($array);
    }

Comments

0
<?php
/**
 * Return last element from array without removing that element from array.
 * https://github.com/jdbevan/PHP-Scripts/
 * 
 * @param array $array The array to get the last element from
 * @return mixed False if $array is not an array or an empty array, else the key of the last element of the array.
 */ 
function array_peek($array) {
    if (!is_array($array)) return false;
    if (count($array)<1) return false;

    $last_key = array_pop(array_keys($array));
    return $array[$last_key];
}
?>

Comments

0
  1. Get last key:
$last_key = array_key_last($my_array); //Get the last key of the given array without affecting the internal array pointer.
  1. Get last element:
echo $my_array[$last_key];

Comments

-6
end($my_array);

I see nothing bad in changing internal pointer. Nobody is using it these days anyway

6 Comments

Again with a sarcastic answer without reading the question. You should really stop this.
you know that's fastest gun problem, lol. still i see no point in the question even after reading it through
@Alin, what's the issue here. Although late to the game, it's a valid answer and point that's it's an underused function.
@Both of you. Read the question again. You'll see it eventually.
@Alin, I have. Maybe you should as your answer suggests using end() as well.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.