554 votes

Meilleure façon d'obtenir le dernier élément d'un tableau w/o de les supprimer?

Ok,

Je sais tout à propos de array_pop(), mais qui supprime le dernier élément. Quelle est la meilleure façon d'obtenir le dernier élément d'un tableau sans le supprimer?

EDIT: Voici un bonus:

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');

ou même

$array = array('a', 'b', 'c', 'd');
unset($array[2]);
echo $array[sizeof($array) - 1]; // Output: PHP Notice:  Undefined offset:  2 in - on line 4

611voto

Iznogood Points 7535

Essayez

$myLastElement = end($yourArray);

Pour réinitialiser (merci @hopeseekr):

 reset($yourArray);

Lien pour le manuel

@David Murdoch a ajouté: $myLastElement = end(array_values($yourArray));// and now you don't need to call reset(). Sur E_STRICT ce qui produit l'avertissement

Strict Standards: Only variables should be passed by reference

Merci o_O Tync et à tous!

44voto

stoutie Points 301

Quel est le problème avec array_slice($array, -1)? (Voir le Manuel: http://us1.php.net/array_slice)

array_slice() () retourne un tableau. Probablement pas ce que vous cherchez. Vous souhaitez l'élément.

21voto

Warbo Points 502

Une façon d'éviter de passer par les erreurs de référence (par exemple. "à la fin(array_values($foo))") est d'utiliser call_user_func ou call_user_func_array:

// PHP Fatal error: Only variables can be passed by reference
// No output (500 server error)
var_dump(end(array(1, 2, 3)));

// No errors, but modifies the array's internal pointer
// Outputs "int(3)"
var_dump(call_user_func('end', array(1, 2, 3)));

// PHP Strict standards:  Only variables should be passed by reference
// Outputs "int(3)"
var_dump(end(array_values(array(1, 2, 3))));

// No errors, doesn't change the array
// Outputs "int(3)"
var_dump(call_user_func('end', array_values(array(1, 2, 3))));

11voto

TecBrat Points 1820

non testé: ne serait-ce pas le travail?

<?php
$last_element=end(array_values($array));
?>

Depuis le tableau retourné par array_values est éphémère, personne ne se soucie de savoir si c'est pointeur est réinitialisé.

et si vous avez besoin de la clé pour aller avec elle, je crois que vous pourriez faire:

<?php
$last_key=end(array_keys($array));
?>

8voto

Fawad Ghafoor Points 1617
 $myLastElement = end($myphpArray);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X