web-dev-qa-db-fra.com

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

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

303
ajsie

Une solution consisterait à utiliser une combinaison de end et key(citant):

  • end() fait avancer 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);

Est-ce que la sortie:

string 'last' (length=4)

c'est-à-dire la clé du dernier élément de mon tableau.

Ensuite, le pointeur interne du tableau se trouvera à la fin du tableau. Comme indiqué dans les commentaires, vous pouvez exécuter reset() sur le tableau pour ramener le pointeur au début du tableau.

569
Pascal MARTIN

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

La solution la plus rapide et la plus puissante est array_slice() </ s>

Barré par l'éditeur: Cette affirmation n'a pas été justifiée et des preuves contraires ont été mentionnées dans les commentaires. S'il y en a lambeau de vérité aux affirmations de cette affiche sur la vitesse/efficacité alors un test de référence doit être fourni.

$last_key = key( array_slice( $array, -1, 1, TRUE ) );
64
Tadej Magajna

Je préfère 

end(array_keys($myarr))
47
Rutger van Baren

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

29
Aditya Choudhary

Je 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 évitez l'erreur en ne transmettant pas de fonction à end () ... 

il fallait juste une variable ... ce n’était pas si grave d’écrire une ligne de code supplémentaire, puis de la désélectionner si vous en aviez besoin.

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

$keys = array_keys($array);
$last = end($keys);
19
Ryan Hungate

Essayez d’utiliser array_pop et array_keys function comme suit:

<?php

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

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

?>
8
codaddict

À partir de PHP7.3, vous pouvez accéder directement à la dernière clé d'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 de tableau (ce qui nécessite deux lignes de code) ou
  2. trier, inverser, extraire, compter, indexer un tableau de clés ou tout autre tromperie

Cette fonction, attendue depuis longtemps, constitue un ajout utile à la ceinture d’outils à fonctions multidisques, qui améliore les performances, évite les effets secondaires indésirables et permet un code épuré/direct/intuitif.

Voici un demo :

$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 notes:

  • array_key_last() est la fonction jumelle de array_key_first () .
  • Ces deux fonctions sont "ignorantes du pointeur".
  • Les deux fonctions renvoient null si le tableau est vide.
  • Les fonctions de frères et soeurs mises au rebut (array_value_first() & array_value_last()) auraient également permis au pointeur ignorant d'accéder aux éléments de fin de livre, mais elles n'ont manifestement pas réussi à recueillir suffisamment de voix pour devenir réalité.

Voici quelques pages pertinentes traitant des nouvelles fonctionnalités:

5
mickmackusa

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
Atif Tariq

Je viens de prendre la fonction d'assistance de Xander et de l'améliorer avec les réponses précédentes:

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
Steve

J'aimerais aussi proposer une solution alternative à ce problème.

En supposant que toutes vos clés soient numériques sans espace, Ma méthode préférée consiste à compter le tableau, puis moins 1, de cette valeur (pour prendre en compte le fait que les clés de 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
user2732377

À partir de PHP> = 7 array_key_last() est le meilleur moyen d'obtenir la dernière clé d'un tableau. Utiliser la combinaison de end(), key() et reset() juste pour obtenir la dernière clé d'un tableau est scandaleux.

$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3

comparer cela à

end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)

Vous devez réinitialiser le tableau pour que le pointeur se trouve au début si vous utilisez la combinaison de end() et key()

2
Hilary Okoro
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
2
voodoo417

Essayez celui-ci avec array_reverse()

 $arr = array(
     'first' => 01,
     'second' => 10,
     'third' => 20, 
 );  
 $key = key(array_reverse($arr));
 var_dump($key);
0
Vishal