如何在OpenCart 3.0.2中使用usort对指定多维数组排序?
在OpenCart 3.0.2中用usort给多维数组排序的可行方案
没问题,在OpenCart 3.0.2环境下用usort处理你这个多维数组完全可行,我给你分场景提供具体的代码示例和说明:
按event_date字段排序(核心需求场景)
你的数组里event_date是MM/DD/YYYY格式的字符串,直接做字符串比较会出错,得先把它转成可比较的时间戳。同时还要处理像第四个元素那样没有event_date的情况,我默认把这类元素排在最后,你可以按需调整。
升序排序(日期从早到晚)
// 假设你的数组变量是$downloads usort($downloads, function($a, $b) { // 提取并转换日期,无event_date的元素用最大整数,确保排在最后 $timestampA = isset($a['event_date']) ? strtotime($a['event_date']) : PHP_INT_MAX; $timestampB = isset($b['event_date']) ? strtotime($b['event_date']) : PHP_INT_MAX; // 比较时间戳返回排序结果 if ($timestampA === $timestampB) { return 0; } return $timestampA < $timestampB ? -1 : 1; });
降序排序(日期从晚到早)
只需要把最后一行的比较逻辑反过来就行:
return $timestampA > $timestampB ? -1 : 1;
按其他字段排序
如果需要按name或者download_id排序,逻辑会更简单:
按name字符串排序(字母顺序)
usort($downloads, function($a, $b) { // 用strcmp处理字符串比较,自动按字母顺序排序 $nameA = $a['name'] ?? ''; $nameB = $b['name'] ?? ''; return strcmp($nameA, $nameB); });
按download_id数字排序
usort($downloads, function($a, $b) { $idA = $a['download_id'] ?? PHP_INT_MAX; $idB = $b['download_id'] ?? PHP_INT_MAX; return $idA - $idB; // 升序,降序就改成$idB - $idA });
注意事项
- OpenCart 3.0.2依赖的PHP版本(5.6+)完全支持匿名函数和
usort的这种用法,直接把代码放在你生成这个数组的控制器方法里就行。 - 如果需要复合排序(比如先按日期排序,日期相同再按名称排序),可以在回调函数里叠加判断逻辑,比如日期相同时再调用
strcmp比较name字段。
内容的提问来源于stack exchange,提问作者Matheus Bica
相关产品推荐
相关产品推荐

