按照一个属性对对象数组进行排序

662

如何根据对象数组中的某个字段(例如 namecount)进行排序?

Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [name] => Mary Jane
            [count] => 420
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [name] => Johnny
            [count] => 234
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [name] => Kathy
            [count] => 4354
        )

   ....

1
countname变量/动态的吗?还是开发人员静态地“知道”它们? - mickmackusa
23个回答

0

使用这个...

$array_list = [
    "Apple" => 2,
    "Pear" => 1,
    "Orange" => 5,
    "Lemon" => 1,
    "Strawberry" => 2,
    "Banana" => 3
];

function cmp($a, $b) {
    return $b - $a;
}

$ao = new ArrayObject($object);
$ao->uasort('cmp');
print_r(json_encode($ao));

再见!!!


1
这个例子中没有使用 $array_list... - Steve A
这个答案缺少教育性的解释。为什么研究人员应该为这个任务实例化一个ArrayObject? - mickmackusa
1
这个答案会让新手感到困惑。正如@SteveA所说,$array_list在这个例子中从未被使用过。 - Noryn Basaya

0

关于多键吃饭的参考答案,来自Demodave

 function array_sort_by(array $arr, $keys){

    if(!is_array($keys))
        $keyList = explode(',', $keys);
    $keyList = array_keys(array_flip($keyList)); // array_unique 
    $keyList = array_reverse($keyList);

    $result = &$arr;
    foreach ($keyList as $key) {
        if(array_key_exists($key, $arr))
            $result = usort($result, function($a, $b) use ($key) { return strcmp($a->{$key}, $b->{$key}); });
    }
    return $result;
}

这个未经解释的答案,充其量只是对另一个问题的正确回答。 - mickmackusa

-2
就我而言,这是我按对象字段对数组进行排序的步骤:
代码:(演示) -- 按last_name升序排序,然后按first_name升序排序
<?php

$array = array(
    (object)array(
        'first_name' => 'Léa',
        'last_name' => 'Weber',
    ),
    (object)array(
        'first_name' => 'Alexandre',
        'last_name' => 'Dupont',
    ),
    (object)array(
        'first_name' => 'Léa',
        'last_name' => 'Zotal',
    ),
    (object)array(
        'first_name' => 'Jérémie',
        'last_name' => 'Hoffmann',
    )
);

usort($array, function($a, $b) {
    return [$a->last_name, $a->first_name]
           <=>
           [$b->last_name, $b->first_name];
});


var_export($array);

输出:

array (
  0 => 
  (object) array(
     'first_name' => 'Alexandre',
     'last_name' => 'Dupont',
  ),
  1 => 
  (object) array(
     'first_name' => 'Jérémie',
     'last_name' => 'Hoffmann',
  ),
  2 => 
  (object) array(
     'first_name' => 'Léa',
     'last_name' => 'Weber',
  ),
  3 => 
  (object) array(
     'first_name' => 'Léa',
     'last_name' => 'Zotal',
  ),
)

PHP7.4及更高版本支持箭头语法。 使用太空船运算符(<=>)或“联合比较运算符”或“三路比较运算符”可以轻松地按多列排序。

资源:https://wiki.php.net/rfc/combined-comparison-operator https://dev59.com/MnA75IYBdhLWcg3wi5wr#54647220


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接