【问题标题】:Ordering a array holding objects by object data按对象数据对包含对象的数组进行排序
【发布时间】:2011-09-11 07:19:14
【问题描述】:

我正在尝试找到一种通过深层对象项对数组进行排序的有效方法,示例如下:

数组方案:

array
  [0] = animal
    count->1
    name->tiger
  [1] = animal
    count->3
    name->lion
  [2] = animal
    count->4
    name->monkey
  [3] = animal
    count->2
    name->elephant

期望结果降序:

array
  [2] = animal
    count->4
    name->monkey
  [1] = animal
    count->3
    name->lion
  [3] = animal
    count->2
    name->elephant
  [0] = animal
    count->1
    name->tiger

谁能比这做得更好?或者可能改进它?

function order_by_count($animals){
    $animals_order = array();
    foreach($animals as $key => $animal){
        $animals_order[$key] = $animal->count;
    }
    natsort($animals_order);
    $master_animals_order = array_reverse(array_keys($animals_order));  
    $revised_animals = array();
    foreach($master_animals_order as $key){
        $animal = $animals[$key];
        $revised_animals[] = $animal;
    }   
    return $revised_animals;
}

【问题讨论】:

标签: php arrays sorting object


【解决方案1】:

用户usort

function animal_compare_function($v1, $v2) {
    if ($v1->count == $v2->count) return 0;
    return ($v1->count < $v2->count) ? 1 : -1; // note -1 and 1 are reversed since we're sorting descending.
}

function order_by_count($animals) {
    usort($animals, 'animal_compare_function');
    return $animals;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多