2012-06-08 17 views
6

Por alguna razón, cuando elimino elementos de un array, me quedan teclas como 0, 2, 3, 4, 6, 9 en lugar de 0, 1, 2, 3, 4, 5. Entonces Estoy tratando de averiguar por qué, y qué puedo hacer para solucionarlo sin ordenar todo a través de sort() ya que eso pondrá las cosas en orden. Solo quiero volver a escribir en cuestión de palabras.PHP corrige claves numéricas en el array

Respuesta

26

Utilice array_values() para obtener los valores de la matriz original y devolverlos a una nueva matriz. Esa nueva matriz contiene nuevas claves numéricas.

$new_array = array_values($old_array); 
+0

Tengo que suponer que esto no funciona cuando una clave de matriz puede ser potencialmente asociativa, y desea saber acerca de thouse. – ThorSummoner

3

Dado que las teclas no necesariamente importan, sólo se puede ejecutar la matriz resultado final a través array_values(). Deja todos los valores en el orden en que ya estaban, restableciendo todas las claves a valores numéricos secuenciales.

+0

En realidad es falso, alguien descubrió que el orden no es el orden de aparición sino el orden de prioridad que se conserva: http://php.net/manual/fr/function.array-values.php#114941 – Sebas

5

Debe usar array_splice() para eliminar elementos de su matriz, de modo que cambie la clave de la forma que desee al mismo tiempo.

Tiene que tener cuidado con array_values() ya que no funcionará (o al menos no), porque puede re-order your numeric indexes. Si agregó el valor en el índice 0 después del valor en el índice 3, el valor en el índice 0 se colocará al final de la matriz devuelto por array_values(), mientras que aparece primero en el suyo.