C'est aussi simple que le titre le sonne; J'ai besoin d'obtenir l'index/la clé du dernier élément inséré. Pourquoi est-ce difficile? Voir les deux exemples de code suivants:
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Écrit:
res=aaa - 0
res=bbb - 1
res=aaa - 2
Array (
[0] => aaa
[1] => bbb
[2] => aaa
)
Bien sûr, cela semble bien fonctionner, mais voyez ceci:
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[2]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Écrit:
res=aaa - 0
res=bbb - 1 <- wrong!
res=aaa - 2 <- wrong!
Array (
[0] => aaa
[2] => bbb <- real key
[3] => aaa <- real key
)
Donc, en bref, la solution de contournement populaire count($array)-1
est imparfaite.
Voici une solution linéaire ( la plus rapide ):
end($a);
$last_id=key($a);
Vous pouvez utiliser clé ($ a) avec fin ($ a)
$a=array();
$a[]='aaa'; foo($a);
$a[3]='bbb'; foo($a);
$a['foo']='ccc'; foo($a);
$a[]='ddd'; foo($a);
function foo(array $a) {
end($a);
echo 'count: ', count($a), ' last key: ', key($a), "\n";
}
impressions
count: 1 last key: 0
count: 2 last key: 3
count: 3 last key: foo
count: 4 last key: 4
Vous pouvez utiliser la fonction end () pour obtenir le dernier élément d'un tableau et array_keys () pour renvoyer un tableau des clés du tableau. Déroutant. En pratique, cela fonctionne comme ceci:
$key = end(array_keys($array));
Le mérite revient à Hollsk dans les commentaires.
Si vous ne travaillez qu'avec des index numériques pour votre tableau, le dernier index généré automatiquement sera toujours la plus grande clé de tableau du tableau.
Ainsi, pour les index générés automatiquement, l'utilisation de quelque chose comme max(array_keys($a))
devrait fonctionner.
Par exemple, ceci:
$a=array();
echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>';
echo 'res='.($a[2]='bbb').' - '.(max(array_keys($a))).'<br>';
echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Vous obtiendrait:
res=aaa - 0
res=bbb - 2
res=aaa - 3
Array
(
[0] => aaa
[2] => bbb
[3] => aaa
)
Mais notez que cela ne fonctionnera pas dans les situations où vous êtes celui qui spécifie l'index ...
Sur les tableaux avec des touches numériques de 0 à n-1, j'utilise toujours:
$key = array_Push($array, $value)-1;
Cela ne devient pas plus rapide ou plus simple, je suppose. Si quelqu'un a quelque chose comme ça qui fonctionne pour d'autres tableaux, faites le moi savoir.
Bah, on dirait que j'ai trouvé la réponse par moi-même:
$last_id = array_pop(array_keys($a));