2010-01-23 85 views
6

Tôi đã có rắc rối với các ví dụ trong cuốn hướng dẫn PHP, vì vậy tôi muốn hỏi ở đây ...Sắp xếp mảng các đối tượng

Tôi có một mảng các đối tượng .. Có cách nào để sắp xếp nó dựa trên nội dung của đối tượng?

Ví dụ, mảng của tôi là:

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

Làm thế nào để sắp xếp các mảng bởi các [bí danh] của đối tượng?

Trong ví dụ này, sản lượng nên là:

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

Cảm ơn trước!

Trả lời

8

Sử dụng usort(). Bạn chỉ định một hàm để thực hiện so sánh đó và sắp xếp được thực hiện dựa trên hàm. Ví dụ .:

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

$arr = ...; 

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

gì nếu tôi cần phải sắp xếp theo tên thương hiệu thì danh mục cho một mảng các đối tượng sản phẩm? – tom10271

2

Tôi nghĩ rằng thứ tự là mất tích, tôi đã tìm thấy này 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

Cảm ơn rất nhiều! Đã làm cho tôi –

Các vấn đề liên quan