Comment obtenir la dernière clé d'un tableau?
Comment obtenir la dernière clé d'un tableau?
Réponses:
Une solution serait d'utiliser une combinaison de end
et (citant) :key
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);
Sortira:
string 'last' (length=4)
c'est-à-dire la clé du dernier élément de mon tableau.
Après cela, le pointeur interne du tableau sera à la fin du tableau. Comme indiqué dans les commentaires, vous souhaiterez peut-être exécuter reset()
sur le tableau pour ramener le pointeur au début du tableau.
reset()
) ;; mais vous avez raison de pointer cette fonction, qui pourrait être utile.
array('a', 'b', 'c', 'd', 'a')
il renverra la clé 0 plutôt que 4.
Bien que cela end()
semble être le plus simple, ce n'est pas le plus rapide. L'alternative la plus rapide et la plus puissante est array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
Comme le disent les tests , sur un tableau de 500 000 éléments, c'est presque 7 fois plus rapide!
end($arr);$key = key($arr);reset($arr);
contre (b) $key = key(array_slice($arr,-1,1,true));
... ce qui a pour résultat d' end()
être BEAUCOUP plus rapide! end () = 0,05326 secondes, array_slice = 8,506 secondes ... hein ??
end()
est le plus rapide car il peut être dérivé d'une fonction C très simple, telle que:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
vers le dernier élément. Faire à end()
peu près O (1). :-)
je préfère
end(array_keys($myarr))
end((array_keys($myarr)))
pour contourner l'avis.
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
Utilisez simplement: echo $array[count($array) - 1];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
qui est intéressant mais pas bon pour les affaires lorsque vous avez un budget temps
$a[1] = 1; $a[5] = 5; $a[0] = 0;
, vous aurez alors un tableau avec des clés (1, 5, 0), dans cet ordre. count($a)
donnera 3 et $a[2]
n'est pas défini. Cela ne vous rend certainement pas 5.
Je ne sais pas si cela va être plus rapide ou non, mais il semble plus facile de le faire de cette façon, et vous évitez l'erreur en ne passant pas de fonction à end () ...
il avait juste besoin d'une variable ... pas un gros problème pour écrire une ligne de code de plus, puis désactivez-la si vous en aviez besoin.
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
Depuis PHP7.3, vous pouvez accéder directement à la dernière clé dans (le niveau externe de) un tableau avec array_key_last ()
Le met définitivement une grande partie du débat sur cette page au lit. C'est de loin le meilleur interprète, ne souffre d'aucun effet secondaire et est une technique directe, intuitive et à appel unique pour fournir exactement ce que cette question cherche.
Une référence approximative comme preuve: https://3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
* le tableau de test contient 500000 éléments, microtime répété 100x puis moyenné puis multiplié par 1000 pour éviter la notation scientifique. Nous remercions @MAChitgarha pour la référence initiale commentée sous la réponse de @ TadejMagajna .
Cela signifie que vous pouvez récupérer la valeur de la clé finale sans:
Cette fonction était attendue depuis longtemps et un ajout bienvenu à la ceinture d'outils de la fonction de tableau qui améliore les performances, évite les effets secondaires indésirables et permet un code propre / direct / intuitif.
Voici une 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);
}
Production:
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 sœur de array_key_first () .null
si le tableau est vide.array_value_first()
et sœur ignorées ( & array_value_last()
) auraient également offert au pointeur ignorant l'accès aux éléments de serre-livres, mais elles n'ont manifestement pas réussi à recueillir suffisamment de votes pour prendre vie.Voici quelques pages pertinentes sur les nouvelles fonctionnalités:
ps Si quelqu'un soupèse certaines des autres techniques, vous pouvez vous référer à cette petite collection de comparaisons: ( Démo )
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408
Essayez d'utiliser les fonctions array_pop et array_keys comme suit:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
fonctionne sur la valeur de retour de array_keys()
et non sur le tableau d'origine.
Depuis PHP> = 7.3 array_key_last()
est le meilleur moyen d'obtenir la dernière clé d'un tableau. En utilisant la combinaison de end()
, key()
et reset()
juste pour obtenir la clé d'un dernier 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 soit au début si vous utilisez une combinaison de end()
etkey()
Je voudrais également proposer une solution alternative à ce problème.
En supposant que toutes vos clés sont numériques sans aucun espace, ma méthode préférée consiste à compter le tableau puis moins 1 à partir 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
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);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
Essayez celui-ci avec array_reverse()
.
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);
$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
La meilleure solution possible qui peut également être utilisée utilisée en ligne:
end($arr) && false ?: key($arr)
Cette solution n'est qu'une expression / instruction et fournit de bonnes performances n'est pas la meilleure possible.
Exemple d'utilisation en ligne:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
MISE À JOUR: En PHP 7.3+: utilisez (bien sûr) la array_key_last()
méthode nouvellement ajoutée .