Comment obtenir la dernière clé dans un tableau?

Comment puis-je obtenir la dernière clé d'un tableau?

294
demandé sur Mooseman 2010-02-27 20:09:50

16 réponses

Une solution serait d'utiliser une combinaison de end et key (citant) :

  • end() avance le pointeur interne du tableau sur le dernier élément et renvoie sa valeur.
  • key() renvoie l'élément d'index de la position actuelle du tableau.

Donc, une partie du code comme celui-ci devrait faire l'affaire:

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

end($array);         // move the internal pointer to the end of the array
$key = key($array);  // fetches the key of the element pointed to by the internal pointer

var_dump($key);

Affichera :

string 'last' (length=4)

I. e. la clé du dernier élément de mon tableau.

Après cela a été fait le pointeur interne du tableau sera à la fin du tableau. Comme l'a souligné dans les commentaires, vous pouvez exécuter reset() sur le tableau pour amener le pointeur vers le début du tableau.

545
répondu Pascal MARTIN 2018-07-19 07:47:13

Bien que end() semble être le plus facile , ce n'est pas le plus rapide.

L'alternative la plus rapide et la plus forte est array_slice()

Rayé par l'éditeur: Cette affirmation n'a pas été étayée et des preuves contraires ont été mentionnées dans les commentaires. Si il n'y a aucune shred de vérité aux affirmations de cette affiche sur la vitesse / efficacité puis un test de référence doit être fourni.

$last_key = key( array_slice( $array, -1, 1, TRUE ) );
65
répondu Tadej Magajna 2017-04-29 13:18:15

Je préfère

end(array_keys($myarr))
49
répondu Rutger van Baren 2011-09-28 13:05:50

Il suffit d'utiliser: echo $array[count($array) - 1];

28
répondu Aditya Choudhary 2012-09-21 04:07:50

Ne sais pas si cela va être plus rapide ou pas, mais il semble plus facile de le faire de cette façon, et vous éviter l'erreur en ne passant pas dans une fonction end()...

Il avait juste besoin d'une variable... pas un gros problème pour écrire une ligne de code, puis annuler si vous avez besoin de.

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

$keys = array_keys($array);
$last = end($keys);
19
répondu Ryan Hungate 2012-11-16 22:03:25

Depuis PHP 7.3 (2018) Il y a (enfin) une fonction pour cela: http://php.net/manual/en/function.array-key-last.php

$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )

Affichera

orange
11
répondu Patryk Godowski 2018-08-23 09:46:24

Essayer à l'aide de array_pop et array_keys la fonction comme suit:

<?php

$array = array(
    'one' => 1,
    'two' => 2,
    'three' => 3
);

echo array_pop(array_keys($array)); // prints three

?>
8
répondu codaddict 2010-02-27 17:17:58

Je voudrais également offrir une solution alternative à ce problème.

En supposant que toutes vos clés sont numériques sans lacunes, ma méthode préférée est de compter le tableau puis moins 1 de cette valeur (pour tenir compte du fait que les clés du tableau commencent à 0.

$array = array(0=>'dog', 1=>'cat');

$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];

var_dump($lastKey);
print_r($lastKeyValue);

Cela vous donnerait:

Int (1) chat

3
répondu 2015-04-10 10:07:14

Vous pouvez utiliser ceci:

$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array); 
echo key($array);

Une autre Solution consiste à créer une fonction et à l'utiliser:

function endKey($array){
end($array);
return key($array);
}

$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);
3
répondu Atif Tariq 2015-11-17 13:37:44

Je viens de prendre la fonction d'aide de Xander et l'ai améliorée avec les réponses avant:

function last($array){
  $keys = array_keys($array);
  return end($keys);
}


$arr = array("one" => "apple", "two" => "orange", "three" => "pear");    
echo last($arr);
echo $arr(last($arr));
3
répondu Steve 2016-05-16 13:49:18
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
2
répondu voodoo417 2014-01-24 20:30:13

Que de PHP7.3, vous pouvez accéder directement à la dernière touche dans (le niveau extérieur de) un tableau avec array_key_last()

Cela signifie que vous pouvez récupérer la valeur de la clé finale sans:

  1. déplacer le pointeur du tableau (qui nécessite deux lignes de code) ou
  2. trier, Inverser, éclater, Compter, indexer un tableau de clés, ou tout autre faux-nez

Cette fonction était attendue depuis longtemps et un ajout bienvenu à la fonction de tableau ceinture à outils qui améliore les performances, évite les effets secondaires indésirables et permet un code propre/direct/intuitif.

Voici un démo:

$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
    echo "please upgrade to php7.3";
} else {
    echo "First Key: " , key($array) , "\n";
    echo "Last Key: " , array_key_last($array) , "\n";
    next($array);                 // move array pointer to second element
    echo "Second Key: " , key($array) , "\n";
    echo "Still Last Key: " , array_key_last($array);
}

Sortie:

First Key: a
Last Key: c     // <-- unaffected by the pointer position, NICE!
Second Key: b
Last Key: c     // <-- unaffected by the pointer position, NICE!

Quelques remarques:

  • array_key_last() est le frère de la fonction de array_key_first().
  • Ces deux fonctions sont "ignorantes du pointeur".
  • les Deux fonctions renvoient null si le tableau est vide.
  • fonctions de frère ignorées(array_value_first() & array_value_last()) serait également ont offert l'accès pointeur ignorant aux éléments bookend, mais ils ont évidemment échoué à recueillir suffisamment de votes pour venir à la vie.

Voici quelques pages pertinentes discutant des nouvelles fonctionnalités:

0
répondu mickmackusa 2018-08-30 13:18:46
$array = array(
    'something' => array(1,2,3),
    'somethingelse' => array(1,2,3,4)
);

$last_value = end($array);
$last_key = key($array); // 'somethingelse'

Cela fonctionne parce que PHP déplace son pointeur de tableau en interne pour $ array

-2
répondu Scottymeuk 2014-05-20 13:37:56

La meilleure solution possible qui peut également être utilisée utilisée en ligne:

end($arr) && false ?: key($arr)

Avant de donwvoting cette solution faites-moi savoir si vous avez une meilleure solution qui peut être inline et aussi avoir à peu près la même ou une meilleure performance.

Exemple D'utilisation en ligne:

$obj->setValue(
    end($arr) && false ?: key($arr) // last $arr key
);
-2
répondu Mvorisek 2018-07-14 08:57:20

Comme ceci:

$keys = array_keys($array);
$lastKey = $keys[sizeof($array)-1];
-3
répondu Pim Jager 2010-02-27 17:13:27

Ça devrait être quelque chose comme ça...

$latest_kid = end(array_reverse(array_keys($my_array)));

Parce qu'il inverse le tableau lorsque nous appelons array_keys.

-3
répondu Tanvir Ahmad 2015-12-07 02:47:43