我有一个时间戳数组(作为键)和字符串(作为值) 我想获得数组的所有元素,其中时间戳位于特定月份 例如:2015年4月:2015年4月1日0:00至2015年4月23日23:59。
最好的方法是什么?我应该先用ksort
对数组进行排序,还是让它变慢?
编辑:我的阵列转储:
array(327) { [1428226200]=> string(95) "foo" [1428231600]=> string(95) "bar" ... }
如果它更好,我也可以轻松获得这样的数组:
array(327) { ["2014/03/05 09:30"]=> string(95) "foo" ["2015/04/07 11:00"]=> string(95) "bar" ... }
答案 0 :(得分:3)
将时间戳转换为日期并与格式化的月份进行比较:
$dates = /* your array */
$aprilDates = [];
foreach ($dates as $timestamp => $value) {
$date = new \DateTime("@$timestamp");
if ($date instanceof \DateTime && $date->format('m') == 4) {
$aprilDates[$timestamp] = $value;
}
}
您也可以使用\DateTime
功能代替date
:
foreach ($dates as $timestamp => $value) {
if (date('m', $timestamp) == 2) {
$aprilDates[$timestamp] = $value;
}
}
又一个选择:
$startDate = strtotime('first day of April');
$endDate = strtotime('last day of April 23:59:59');
foreach ($dates as $timestamp => $value) {
if ($timestamp >= $startDate && $timestamp <= $endDate) {
echo $value, PHP_EOL;
}
}
关于你的问题
我应该先用ksort对数组进行排序,还是让它变慢?
首先对数组进行排序将对数组进行一次额外的迭代。这意味着是的,它会慢一些。只有几百个项目,但它可能没有明显的区别。