我有一个关联数组,其中$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;
但是我得到一个错误,因为比较函数中的元素不是单个数组元素,而是与键关联的值数组:
非法偏移类型
答案 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;
});