当我需要使用值对数组进行排序时,我正在处理任何多维数组排序,并且应根据日期和时间对值进行排序。我怎么能这样做。
对于某些情况,我无法通过查询来执行此操作,我需要通过PHP排序进行排序,但预定义的函数可以帮助我。
要排序的我的数组:
Array
(
[events] => Array
(
[0] => Array
(
[0] => 213532
[1] => 100% View
[2] => 12/11/2014 09:00
[3] => 12/11/2014 11:00
)
[1] => Array
(
[0] => 213533
[1] => test 80
[2] => 12/11/2014 06:00
[3] => 12/11/2014 08:00
)
[2] => Array
(
[0] => 213534
[1] => wf4
[2] => 12/12/2014 00:00
[3] => 12/12/2014 23:59
)
[3] => Array
(
[0] => 213535
[1] => Standaard:
[2] => 12/12/2014 10:00
[3] => 12/12/2014 12:00
)
)
)
[2]值的每个子数组。
['事件'] [$ i] [2]
应该排序和重新排列。通过以下方式。
12/11/2014 06:00
12/11/2014 09:00
12/12/2014 00:00
12/12/2014 10:00
我怎么能这样做,任何逻辑帮助都会有用。
答案 0 :(得分:1)
您正在寻找的是usort()
,它允许您定义自己的回调/比较功能。
基本上你会想要这样的东西:
function my_event_sorter($left, $right) {
if ($left[2] == $right[2])
return 0;
return strtotime($left[2]) < strtotime($right[2]) ? -1 : 1;
}
usort($events, 'my_event_sorter');
这个比较函数将接收两个参数(要比较的两个元素),并且它应该返回三个整数值中的一个:
-1
:左边的值小于右边的值(即顺序很好)。0
:两个值都相同(即订单也很好)。1
:正确的值小于左边的值(即必须交换订单)。答案 1 :(得分:1)
@Mario是对的,你可能想要的是usort。您还可以使用strtotime将字符串日期转换为整数,这很容易比较。我在这里写了一个工作的例子。您将看到我首先打印出数据(未排序),然后使用我的自定义排序功能调用usort。当我再次打印出阵列时,它现在按日期排序。
function compare($a, $b) {
$timeA = strtotime($a[2]);
$timeB = strtotime($b[2]);
if ($timeA < $timeB) {
return -1;
}
if ($timeA > $timeB) {
return 1;
}
return 0;
}
function printArrayContents($arr) {
for ($i = 0; $i < count($arr); $i++) {
echo $arr[$i][2] , "<BR>";
}
}
$events = array(
0 => array(
0 => 213532,
1 => '100% View',
2 => '12/11/2014 09:00',
3 => '12/11/2014 11:00'
),
1 => array(
0 => 213533,
1 => 'test 80',
2 => '12/11/2014 06:00',
3 => '12/11/2014 08:00'
),
2 => array(
0 => 213534,
1 => 'wf4',
2 => '12/12/2014 00:00',
3 => '12/12/2014 23:59'
),
3 => array(
0 => 213535,
1 => 'Standaard:',
2 => '12/12/2014 10:00',
3 => '12/12/2014 12:00'
)
);
echo "Unsorted:<BR>";
printArrayContents($events);
if (usort($events, "compare")) {
echo "Sorted:<BR>";
printArrayContents($events);
} else {
echo "Sort failed.<BR>";
}
输出:
Unsorted:
12/11/2014 09:00
12/11/2014 06:00
12/12/2014 00:00
12/12/2014 10:00
Sorted:
12/11/2014 06:00
12/11/2014 09:00
12/12/2014 00:00
12/12/2014 10:00
答案 2 :(得分:0)
如果它们是唯一的,您可以使用日期时间值作为键,然后使用ksort:
$newArray = array();
foreach($events as $event){
$newArray[$event[2]] = $event;
}
ksort($newArray);