按日期对对象数组进行排序
在 PHP 中,我们经常遇到需要按特定属性对对象数组进行排序的情况,例如日期字段。这使我们能够按时间顺序显示或操作数据。
按日期重新排列对象
考虑以下对象数组,其中每个对象代表一条带有日期属性:
$array = [
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
];
要按日期属性按升序(最旧的在前)对这些对象进行排序,我们可以利用 strtotime() 函数和 usort() 函数。
自定义比较函数
要使用 usort(),我们需要定义一个自定义比较函数,根据两个对象的日期属性来比较它们。以下代码定义了一个函数,该函数从第二个对象的日期的时间戳中减去第一个对象的日期的时间戳(使用 strtotime() 转换):
function cb($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
}
使用 usort() 对数组进行排序
一旦我们有了比较函数,我们就可以对数组调用 usort(),将比较函数作为第二个参数:
usort($array, 'cb');
示例
使用前面的示例数组,结果排序后的数组将是:
[
495 => (object)['date' => '2009-10-31 18:24:09'],
582 => (object)['date' => '2010-2-11 12:01:42'],
]
PHP 5.3及以上版本
对于PHP 5.3及以上版本,可以使用更简单的匿名函数作为比较函数:
usort($array, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
这种方法实现了与前一种方法相同的排序结果。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3