2012-05-05 19 views
6

tengo una matriz que tiene este aspecto:claves de matriz con números ascendentes

[867324] 
    [id] => 867324 
    [name] => Example1 

[345786]  
    [id] => 345786 
    [name] => Example2 

[268531] 
    [id] => 268531 
    [name] => Example3 

Así como se puede ver, los primeros elementos no están en ningún orden específico. A los fines del ejemplo, puedes considerarlos como números aleatorios. El resultado final me gustaría terminar con es:

[0] 
    [id] => 867324 
    [name] => Example1 

[1]  
    [id] => 345786 
    [name] => Example2 

[2] 
    [id] => 268531 
    [name] => Example3 

He tratado de explotar, pero está claro que debo estar haciendo algo mal. ¡Cualquier ayuda es apreciada!

Respuesta

26

Esto volverá a numerar las teclas conservando el orden de los elementos.

$new_array = array_values($old_array); 
+1

Th ¡es el uno! – Nadh

+0

Ah, eso es lo que es. Ahora, solo curiosidad: ¿qué tan rápido es este tipo de proceso para una matriz bastante grande? –

+0

Es bastante lento. Acabo de actualizar un script para renumerar un array de 1,000 elementos repetidamente, y mi máquina de 2.8GHz apenas puede gestionar 8,000 iteraciones por segundo. Definitivamente no desea hacer esto en cada carga de página si tiene más de unas pocas docenas de elementos. – kijin

2

Si el orden de los elementos no importa, creo que el método de clasificación de PHP no mantendrá los índices. http://www.php.net/manual/en/function.sort.php

sort($array); 

Nota: Esta función asigna nuevas claves para los elementos de matriz. Eliminará todas las claves existentes que puedan haber sido asignadas, en lugar de simplemente reordenar las claves.

Actualización: Esto funciona, aunque el método array_values ​​mencionado tiene mucho más sentido.

+1

Sí , todo está bien :) –

7

Puede restablecer las claves de matriz utilizando array_values():

$array = array_values($array); 

uso de este método una matriz tales como:

Array('123'=>'123', 
     '456'=>'456', 
     '789'=>'789') 

se volverán a numerar como:

Array('0'=>'123', 
     '1'=>'456', 
     '2'=>'789') 
Cuestiones relacionadas