2010-01-23 20 views
6

nesneleri dizisi, bu yüzden burada şunu sormak istiyorum ...Sıralama PHP kılavuzunda örneklerle sorun yaşadım

ben .. sıralamak için bir yolu var mı nesneler dizisi var nesnenin içeriğine göre mi?

Örneğin benim dizidir:

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 
     ) 
) 

nasıl nesnelerin [takma adı] tarafından diziyi sıralarım? Örnekte

, çıkış olmalıdır: önceden

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 
     ) 
) 

teşekkürler!

cevap

8

usort()'u kullanın. Bu karşılaştırmayı yapacak bir işlev belirtirsiniz ve sıralama, işleve bağlı olarak yapılır. Örn .:

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

$arr = ...; 

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

Ne Ürün nesnenin bir dizi için marka isimleri ile şu kategoriyi sıralamak gerekirse? – tom10271

2

Şu sipariş eksik olduğunu düşünüyorsanız, ben buldum bu 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

Çok teşekkürler! Benim için çalıştı –