我如何排序这个对象数组的一个字段,如名称或计数?

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
        )

   ....

当前回答

如果需要基于本地的字符串比较,可以使用strcoll而不是strcmp。

记住,如果需要,首先使用setlocale和LC_COLLATE来设置区域信息。

  usort($your_data,function($a,$b){
    setlocale (LC_COLLATE, 'pl_PL.UTF-8'); // Example of Polish language collation
    return strcoll($a->name,$b->name);
  });

其他回答

这里有一种使用闭包的更好的方式

usort($your_data, function($a, $b)
{
    return strcmp($a->name, $b->name);
});

请注意,这不在PHP的文档中,但如果你使用5.3+闭包,可以提供可调用参数。

你可以像这样使用我们

如果你想按数字排序:

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

或Abc char:

function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

查看更多信息:https://www.php.net/manual/en/function.usort.php

使用usort,这里有一个从手册改编的例子:

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

usort($your_data, "cmp");

你也可以使用任何可调用对象作为第二个参数。下面是一些例子:

使用匿名函数(来自PHP 5.3) 作用(your_data美元,函数(a, b)美元{返回比较字符串(a - >名称、b美元- >名称);}); 从类内部 Usort ($your_data, array($this, "cmp"));// "cmp"应该是类中的一个方法 使用箭头函数(来自PHP 7.4) 作用your_data美元,fn (a, b)美元= > strcmp (a - >名称、b美元- >名称));

同样,如果你比较数值,fn($a, $b) => $a->count - $b->count作为“比较”函数应该可以做到这一点,或者,如果你想用另一种方式做同样的事情,从PHP 7开始,你可以使用太空船操作符,像这样:fn($a, $b) => $a->count <=> $b->count。

如果一切都失败了,还有另一个解决方案:

$names = array(); 
foreach ($my_array as $my_object) {
    $names[] = $my_object->name; //any object field
}

array_multisort($names, SORT_ASC, $my_array);

return $my_array;

用这个……

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

再见! !