2009-12-23 17 views
6

que tengo una serie como esta (después de que no se ha establecido algunos elementos):ordenar una matriz y asignar nuevas claves numéricas?

$array[3] = 'apple'; 
$array[5] = 'pear'; 
$array[23] = 'banana'; 

que funcionan lo uso para ordenar a:

$array[0] = 'apple'; 
$array[1] = 'pear'; 
$array[2] = 'banana'; 

he intentado algunas de las funciones de clasificación, pero que aún no ha trabajo.

+0

¿No debería ser '0 = apple',' 1 = banana', '2 = pear'? :) – BalusC

+0

no quiero ordenar por las teclas ... pero si no hay manera de hacerlo, está bien ordenar por valores también. – ajsie

+0

Comparación de todas las funciones de clasificación comunes: http://php.net/manual/en/array.sorting.php –

Respuesta

15

No estoy 100% seguro de cuál es tu intención. Simplemente ordenar un arreglo basado en el valor pero asignar nuevas claves, utilizar sort():

sort($array); 
print_r($array); 

Claves no son conservado con esta función en particular. Salida:

Array 
(
    [0] => apple 
    [1] => banana 
    [2] => pear 
) 

Pero si desea ordenar la matriz mediante el uso valor clave ksort():

ksort($array); 
print_r($array); 

de salida:

Array 
(
    [3] => apple 
    [5] => pear 
    [23] => banana 
) 

que preserve las teclas sin embargo. Para reasignar teclas para una matriz de 0 utilizar en adelante array_values() en el resultado:

ksort($array); 
$array_with_new_keys = array_values($array); // sorted by original key order 
print_r($array_with_new_keys); 

Salida:

Array 
(
    [0] => apple 
    [1] => pear 
    [2] => banana 
) 
+0

pero eso no asigna nuevas claves – ajsie

+0

oh, en realidad lo hizo =) – ajsie

+1

Eso no conservará el orden apple , pera, plátano. Él quiere ordenar por valor, pero restablece las llaves. – Seb

6

ksort() clasificará por clave, a continuación, obtener los valores con array_values() y que va a crear una nueva matriz con claves desde 0 hasta n-1.

ksort($array) 
$array = array_values($array); 

Por supuesto, no necesita ksort si ya está ordenado por clave. También podría usar array_values ​​() directamente.

4
$arrayOne = array('one','two','three'); //You set an array with certain elements 
unset($array[1]);      //You unset one or more elements. 
$arrayTwo = array_values($arrayOnw); //You reindex the array into a new one. 

print_r($arrayTwo);      //Print for prove. 

Los print_r resultados son:

Array ([0] => one [1] => three) 
+0

esta fue una buena solución dos – ajsie

Cuestiones relacionadas