53 votes

PHP obtenir l'index du dernier élément inséré dans le tableau

C'est aussi simple que le titre sonne; Je dois obtenir l'index / 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
)
 

En bref, la solution de contournement populaire count($array)-1 est erronée.

72voto

romaninsh Points 6048

Voici une solution linéaire (la plus rapide ):

 end($a);
$last_id=key($a);
 

21voto

VolkerK Points 54118

Vous pouvez utiliser la clé ($ a) avec la 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";
}
 

empreintes

 count: 1 last key: 0
count: 2 last key: 3
count: 3 last key: foo
count: 4 last key: 4
 

19voto

Sam152 Points 8472

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 de tableau. Déroutant. En pratique, cela fonctionne comme ceci:

 $key = end(array_keys($array));
 

Le crédit va à Hollsk dans les commentaires.

2voto

Pascal MARTIN Points 195780

Si vous travaillez uniquement 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, utiliser 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 obtiendriez:

 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 spécifiez l'index ...

0voto

Christoph Points 909

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, s'il vous plaît faites le moi savoir.

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