Acu*_*ubi 20 php arrays sorting
Array
(
[0] => Array
(
[dateTime] => 2011-10-18 0:0:00
[chanl1] => 20.7
[chanl2] => 45.4
[chanl3] =>
)
[1] => Array
(
[dateTime] => 2011-10-18 0:15:00
[chanl1] => 20.7
[chanl2] => 45.4
[chanl3] =>
)
[2] => Array
(
[dateTime] => 2011-10-18 00:14:00
[chanl1] => 20.7
[chanl2] => 33.8
[chanl3] =>
)
[3] => Array
(
[dateTime] => 2011-10-18 00:29:00
[chanl1] => 20.6
[chanl2] => 33.9
[chanl3] =>
)
Run Code Online (Sandbox Code Playgroud)
我想基于[dateTime]对上面的数组进行排序,最终的输出应该是:
Array
(
[0] => Array
(
[dateTime] => 2011-10-18 0:0:00
[chanl1] => 20.7
[chanl2] => 45.4
[chanl3] =>
)
[1] => Array
(
[dateTime] => 2011-10-18 00:14:00
[chanl1] => 20.7
[chanl2] => 33.8
[chanl3] =>
)
[2] => Array
(
[dateTime] => 2011-10-18 0:15:00
[chanl1] => 20.7
[chanl2] => 45.4
[chanl3] =>
)
[3] => Array
(
[dateTime] => 2011-10-18 00:29:00
[chanl1] => 20.6
[chanl2] => 33.9
[chanl3] =>
)
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么做?谢谢!
Cro*_*zin 51
使用自定义比较器的usort()
功能:
$arr = array(...);
usort($arr, function($a, $b) {
$ad = new DateTime($a['dateTime']);
$bd = new DateTime($b['dateTime']);
if ($ad == $bd) {
return 0;
}
return $ad < $bd ? -1 : 1;
});
Run Code Online (Sandbox Code Playgroud)
日期时间类已重载比较运算符(<
,>
,==
).
Cli*_*ive 11
使用uasort()
自定义排序回调应该这样做:
function cmp($a, $b) {
if ($a['dateTime'] == $b['dateTime']) {
return 0;
}
return ($a['dateTime'] < $b['dateTime']) ? -1 : 1;
}
uasort($arr, 'cmp');
Run Code Online (Sandbox Code Playgroud)
uasort()
保留数组的键,usort()
如果不需要,可以使用它.
Use*_*407 10
为了提高性能,使用array_multisort的方法非常有效:
$ord = array();
foreach ($array as $key => $value){
$ord[] = strtotime($value['dateTime']);
}
array_multisort($ord, SORT_ASC, $array);
print_r($array);
Run Code Online (Sandbox Code Playgroud)
小智 7
使用宇宙飞船运算符对 DateTime 对象进行简单排序:
$list = [
new DateTime('yesterday'),
new DateTime('today'),
new DateTime('1 week ago'),
];
uasort($list, function ($a, $b) {
return $a <=> $b;
});
var_dump($list);
Run Code Online (Sandbox Code Playgroud)
对于 php 数组和对象,此示例有助于排序...
对于日期时间降序:
usort($response_data['callback'], function($a, $b) {
return strcasecmp(strtotime($b->view_date), strtotime($a->view_date));
});
Run Code Online (Sandbox Code Playgroud)
对于日期时间升序:
usort($response_data['callback'], function($a, $b) {
return strtotime($a->view_date) - strtotime($b->view_date);
});
Run Code Online (Sandbox Code Playgroud)