2012-06-20 30 views
5

Tôi đã một mảng khá lớn trông giống nhưPHP loại mảng của stdClass Objects bởi id

Array(
    [0] => stdClass Object 
     (
      [id] => 8585320 
      [title] => the title 
      [type] => page 
      [url] => link.com 
      [excerpt] => brief description 
     ) 

    [1] => stdClass Object 
     (
      [id] => 8585320 
      [title] => the title 
      [type] => page 
      [url] => link.com 
      [excerpt] => brief description 
     ) 
) 

Tôi không có kiểm soát rõ ràng trong cách mảng được hình thành, và làm thế nào nó đi ra, nó có vẻ như có rất ít nếu có bất kỳ logic nào. Nhưng tôi bị mắc kẹt với nó. Vì vậy, những gì tôi cần làm là cơ bản lấy mảng sắp xếp nó bằng số của từng đối tượng stdClass và sau đó chắc chắn rằng các id là từ lớn nhất đến nhỏ nhất và không nhỏ nhất đến lớn nhất. Tất cả trong khi vẫn duy trì cấu trúc hiện tại của sự kết hợp đối tượng mảng

Tôi thậm chí không thể nghĩ ngay bây giờ cách tôi cần tiếp cận phân loại theo cách tôi cần. Vì nó đã là một ngày đủ dài.

CẬP NHẬT

public function updateRet($a, $b) { 
     return $b->id - $a->id; 
    } 
usort($ret, 'updateRet'); 

Trả lời

10

Chỉ cần sử dụng usort:

function compare_some_objects($a, $b) { // Make sure to give this a more meaningful name! 
    return $b->id - $a->id; 
} 

// ... 

usort($array, 'compare_some_objects'); 

Nếu bạn có PHP 5.3 hoặc cao hơn, bạn cũng có thể sử dụng một chức năng ẩn danh:

usort($array, function($a, $b) { return $b->id - $a->id; }); 
+0

Im nhận được so sánh không hợp lệ chức năng, Im nghĩ rằng nguyên nhân của nó tôi có một mảng với các đối tượng bên trong của nó. Vì vậy, tôi phải làm cho nó để làm '$ b [x] -> id' bằng cách nào đó nhưng như thế nó không hoạt động – chris

+0

Ive có php 5.2 – chris

+0

@chris: Sử dụng phương pháp đầu tiên sau đó. Đảm bảo chức năng được xác định đúng. – Ryan

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