Bonjour a tous,
Je veux le code le plus court possible pour obtenir la référence (pour modification ou suppression, donc pas une copie) du dernier élément d'un tableau associatif.
Je tombe sur du code que je trouve lourd !
Voici les possibilités que j'ai trouvé :
1) Utilisation du (dangereux) COUNT-1
Tout dabord, cette solution m'impose l'utilisation d'un tableau indexé.. et la gestion des index qui va avec (voir ci-après).
Le classique count-1 est très dangereux en PHP tel quel car si on supprime un élément d'un tableau, php ne réindexe pas les élément :
Par exemple, si on retire l'élément 2 de 0,1,2,3
la liste des index du tableau va devenir 0,1,3.
Conséquence si l'on cherche a atteindre le dernier élément via (pourtant très classique), tab[count-1], php va tenter de retourner tab[2].. qui n'existe plus.
Bien sur on peut réindexer tout le tableau à chaque suppression via un array_values, mais c'est une opération supplémentaire que l'on m'impose sur ce tableau.. .. qui au départ était simplement associatif et que je dois maintenant indexer.. ..et réindexer à chaque suppression... Tout ca juste pour obtenir le dernier élément d'un tableau en écriture!
On tombe dans une lourdeur qui est le sujet de ce POST.
2) Le END()
end() déplace le pointeur interne du tableau array jusqu'au dernier élément et retourne sa valeur.
sauf que je veux pouvoir modifier, ou supprimer 'cranberry'..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php $fruits = array('apple', 'banana', 'cranberry'); echo end($fruits); // cranberry ?>
3) Le "array_pop"
Retourne la dernière valeur du tableau array ... mais le supprime du tableau.
Ca ne marche pas si je veux simplement modifier la valeur du dernier élément.
4) Les boucles
Oui.. juste pour obtenir le dernier élément d'un tableau (en écriture).. c'est ultra-lourd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $derniere_cle=null; foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; $derniere_cle=$k; } $a[$derniere_cle]="...";
Quelqu'un connait un code plus court ?
Partager