使用usort

时间:2018-02-27 19:46:06

标签: php sorting

我有一个关联数组,其中$category(类别标题)为关键字,$auditElement为值:

foreach ($auditElements as $auditElement) {
    $category = $auditElement->getAuditCategory()->getTitle();
    if (!array_key_exists($category, $groupedEntries)) {
        $groupedEntries[$category] = [];
        $auditCategories[$category] = $auditElement->getAuditCategory()->getSequenceIndex();
    }

    $groupedEntries[$category][] = $auditElement;
}

现在我想按类别的$groupedEntries对此数组sequenceIndex进行排序。因此,我已将sequenceIndex类别的$auditCategories保存在一个额外数组$category中,其中sequenceIndex为关键字,usort为值。

我的想法是使用uasort$groupedEntries按sequenceIndex对uasort($groupedEntries, function ($cat1, $cat2) use ($auditCategories) { $idx1 = $auditCategories[$cat1]; $idx2 = $auditCategories[$cat2]; return ($idx1 == $idx2) ? 0 : ($idx1 > $idx2]) ? 1 : -1; }); 进行排序:

proxy_read_timeout 86400;

但是我得到一个错误,因为比较函数中的元素不是单个数组元素,而是与键关联的值数组:

  

非法偏移类型

1 个答案:

答案 0 :(得分:1)

由于$groupedEntries是数组数组,$cat1(和$cat2)是子数组。相反,请尝试uksort,在这里,您将收到作为比较值:

uksort($groupedEntries, function ($cat1, $cat2) use ($auditCategories) {
    $idx1 = $auditCategories[$cat1];
    $idx2 = $auditCategories[$cat2];
    return ($idx1 == $idx2) ? 0 : ($idx1 > $idx2]) ? 1 : -1;
    // you can replace last line with
    // return $idx1 - $idx2; 
    // or if you want to be more precise and you have php7
    // return $idx1 <=> $idx2;
});