2010-01-23 26 views
6

que he tenido problemas con los ejemplos en el manual de PHP, por lo que me gustaría hacer esta aquí ...Ordenar un array de objetos

Tengo una matriz de objetos .. ¿Hay una manera de ordenar ¿basado en los contenidos del objeto?

Por ejemplo, mi matriz es:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 123 
      [alias] => mike 
     ) 

    [1] => stdClass Object 
     (
      [id] => 456 
      [alias] => alice 
     ) 

    [2] => stdClass Object 
     (
      [id] => 789 
      [alias] => zeke 
     ) 

    [3] => stdClass Object 
     (
      [id] => 987 
      [alias] => dave 
     ) 
) 

¿Cómo puedo ordenar la matriz por las [alias] de los objetos?

En el ejemplo, la salida debe ser:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 456 
      [alias] => alice 
     ) 

    [1] => stdClass Object 
     (
      [id] => 987 
      [alias] => dave 
     ) 

    [2] => stdClass Object 
     (
      [id] => 123 
      [alias] => mike 
     ) 

    [3] => stdClass Object 
     (
      [id] => 789 
      [alias] => zeke 
     ) 
) 

Gracias de antemano!

Respuesta

8

Use usort(). Usted especifica una función para hacer esa comparación y la ordenación se hace en función de la función. Ej .:

function my_comparison($a, $b) { 
    return strcmp($a->alias, $b->alias); 
} 

$arr = ...; 

usort($arr, 'my_comparison'); 
+0

¿Y si necesito para ordenar por nombres de marca a continuación categoría para un conjunto de objetos del producto? – tom10271

2

Creo que el orden no se encuentra, he encontrado este other function

<?php 
/** 
* Sort array of objects by field. 
* 
* @autor Lea Hayes 
* @param array $objects Array of objects to sort. 
* @param string $on Name of field. 
* @param string $order (ASC|DESC) 
*/ 
function sort_on_field(&$objects, $on, $order = 'ASC') { 
    $comparer = ($order === 'DESC') 
     ? "return -strcmp(\$a->{$on},\$b->{$on});" 
     : "return strcmp(\$a->{$on},\$b->{$on});"; 
    usort($objects, create_function('$a,$b', $comparer)); 
} 

$order = ($_GET['order'] === 'asc') ? 'ASC' : 'DESC'; 
sort_on_field($arr, 'alias', $order); 
+0

¡Muchas gracias! Trabajó para mi –

Cuestiones relacionadas