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

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
        )

   ....

当前回答

如果你在Codeigniter内部使用这个,你可以使用以下方法:

usort($jobs, array($this->job_model, "sortJobs"));  // function inside Model
usort($jobs, array($this, "sortJobs")); // Written inside Controller.

@rmooney谢谢你的建议。这对我真的很有帮助。

其他回答

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

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

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

使用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。

你可以使用Nspl中的排序函数:

use function \nspl\a\sorted;
use function \nspl\op\propertyGetter;
use function \nspl\op\methodCaller;

// Sort by property value
$sortedByCount = sorted($objects, propertyGetter('count'));

// Or sort by result of method call
$sortedByName = sorted($objects, methodCaller('getName'));

你可以这样用usort:

usort($array,function($first,$second){
    return strcmp($first->name, $second->name);
});

对于我来说,这是我如何按照对象字段对对象数组进行排序的:

代码:(演示)——按last_name ASC排序,然后按first_name ASC排序

<?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://stackoverflow.com/a/54647220/18090932