按對象字段對對象數組進行排序

如何按對象的字段之一(例如namecount對這個對象數組進行排序? php

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樓

這是使用閉包的更好方法 git

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

請注意,這不在PHP文檔中,可是若是您使用5.3+閉包,則能夠在其中提供可調用參數。 github


#2樓

若是您使用的是php oop,則可能須要更改成: 數組

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

//in this case FUNCTION_NAME would be cmp
usort($your_data, array('YOUR_CLASS_NAME','FUNCTION_NAME'));

#3樓

若是須要基於本地的字符串比較,則能夠使用strcoll而不是strcmp閉包

若是須要,請記住首先將setlocaleLC_COLLATE一塊兒使用以設置語言環境信息。 ide

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

#4樓

若是在Codeigniter中使用此方法,則能夠使用如下方法: oop

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

@rmooney謝謝您的建議。 真的對我有幫助。 this


#5樓

若是您只須要按一個字段排序,那麼usort是一個不錯的選擇。 可是,若是您須要按多個字段進行排序,則解決方案很快就會變得混亂。 在這種狀況下,能夠使用YaLinqo庫*, 庫爲數組和對象實現相似於SQL的查詢語法。 對於全部狀況,它都有一個漂亮的語法: spa

$sortedByName         = from($objects)->orderBy('$v->name');
$sortedByCount        = from($objects)->orderBy('$v->count');
$sortedByCountAndName = from($objects)->orderBy('$v->count')->thenBy('$v->name');

在這裏, '$v->count'function ($v) { return $v->count; }的簡寫。 function ($v) { return $v->count; } function ($v) { return $v->count; } (均可以使用)。 這些方法鏈返回迭代器,可是若是須要,能夠在最後添加->toArray()以得到數組。 code

*由我開發

相關文章
相關標籤/搜索