Es tan fácil como suena el título; Necesito obtener el índice/clave del último ítem insertado. ¿Por qué es esto difícil? Consulte los siguientes dos ejemplos de código:PHP obtiene el índice del último elemento insertado en el conjunto
$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>');
escribe:
res=aaa - 0
res=bbb - 1
res=aaa - 2
Array (
[0] => aaa
[1] => bbb
[2] => aaa
)
Claro, que parece funcionar bien, pero ver esto:
$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>');
escribe:
res=aaa - 0
res=bbb - 1 <- wrong!
res=aaa - 2 <- wrong!
Array (
[0] => aaa
[2] => bbb <- real key
[3] => aaa <- real key
)
En resumen, la solución popular count($array)-1
es defectuoso.
Esto es de hecho más rápido. – Christian
¡Es bueno! ¿Es 'end ($)' necesario si usa '[]'? Me he dado cuenta de que también funciona sin él –
Desafortunadamente, sí. Una simple prueba muestra que la operación '$ array [] = $ value;' no establece el puntero interno de la matriz al final. se queda donde el último 'reset',' next', 'end' u operación similar lo configuró, o en la posición 0 si se trata de una nueva matriz con nuevos valores agregados. – SWilk