如何基于数组中的日期值对PHP数组元素进行排序?
PHP 按数组元素内的日期字段排序解决方案
你现有代码不生效的核心原因是:数组内的每个元素同时包含姓名和日期两个部分,直接将完整元素传入strtotime()无法正确解析得到对应时间戳,因此排序逻辑无法正常运行。
根据你给出的数组结构,每个元素都是[姓名] => [日期]格式的字符串,只需要在排序回调中先提取出日期部分再做比较即可,参考实现代码如下:
function date_sort($a, $b) { // 提取=>右侧的日期部分,trim去除前后多余空格 $dateA = trim(explode('=>', $a)[1]); $dateB = trim(explode('=>', $b)[1]); // 转换为时间戳后比较大小 return strtotime($dateA) - strtotime($dateB); } // 测试用数组 $main_Array = [ 'Luke Karizo => Jul 18 2021', 'telse Elarazo => Aug 15 2021', 'Sarath S => Jul 08 2021' ]; usort($main_Array, "date_sort"); print_r($main_Array);
上述代码运行后输出结果和你预期一致:
Array ( [0] => Sarath S => Jul 08 2021 [1] => Luke Karizo => Jul 18 2021 [2] => telse Elarazo => Aug 15 2021 )
如果你使用的是 PHP 7.0 及以上版本,还可以用更简洁的匿名函数+太空船运算符写法:
usort($main_Array, function($a, $b) { $dateA = strtotime(trim(explode('=>', $a)[1])); $dateB = strtotime(trim(explode('=>', $b)[1])); return $dateA <=> $dateB; });
如果你给出的数组是书写笔误,实际是键为姓名、值为日期的二维数组,可以使用对应适配的排序逻辑:
// 二维数组示例 $main_Array = [ ['Luke Karizo' => 'Jul 18 2021'], ['telse Elarazo' => 'Aug 15 2021'], ['Sarath S' => 'Jul 08 2021'] ]; usort($main_Array, function($a, $b) { $dateA = strtotime(current($a)); $dateB = strtotime(current($b)); return $dateA <=> $dateB; });
内容的提问来源于stack exchange,提问作者Hybrid Developer
相关产品推荐
相关产品推荐

