通过两个字段对Php对象的数组进行排序

时间:2016-04-30 17:48:01

标签: php arrays sorting

我使用这个形成了这个对象数组:

foreach($snapdealProductCollection as $snapdealProduct){

            $item = new stdClass();
            $item->id = $snapdealProduct->getId();
            $item->vendortype=2;
            $item->name = $snapdealProduct->getTitle();
            $item->imgsrc = $snapdealProduct->getImageLink();
            $item->price = $snapdealProduct->getEffectivePrice();
            $item->source = "Snapdeal.com";
            $item->redirectUrl = $snapdealProduct->getLink().$affProgram;
            $item->type = $snapedealType[$snapdealProduct->getId()];
            $item->simid = $snapdealsimid[$snapdealProduct->getId()];
            $item->stype = 2;
            $i++;

            array_push($items, $item);
        }

我需要先按类型排序,然后按simid排序。我该如何排序? 完整代码:

$unsortedItems = $this->getSimilarItems($pid);

    $vendors=$this->getAllVendors();


    usort($unsortedItems , array($this, "cmp"));

function cmp($a, $b)
{
    return strcmp($a->type, $b->type) || strcmp($a->simid, $b->simid);
}

$ unSortedItems是从foreach块返回的数组

2 个答案:

答案 0 :(得分:0)

基本上你比较第一个字段第一个字段和第二个第二个字段: - )

function cmp($a, $b) { 
    return strcmp($a->type, $b->type) || strcmp($a->simid, $b->simid);
}

如果第一个比较返回0,则将评估第二个比较。 你可以写更长的时间:如果第一个字段相等,则比较另一个字段,否则返回第一个比较的结果。

答案 1 :(得分:0)

您可以使用usort()功能,比较功能应如下所示:

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

usort($unsortedItems , array($this, "cmp"));

以下是相关参考资料: