[英]Sorting a Multidimensional array by day using usort not working in PHP
這是我要按工作日(周一至周日)排序的數組,我已經檢查了類似的問題,但是沒有一個問題可以解決此問題。
$data =
array (
0 =>
array (
'mid' => 19,
'centerid' => 1,
'sid' => 13,
'weekday' => 'tuesday',
'break' => 1,
),
1 =>
array (
'mid' => 14,
'centerid' => 1,
'sid' => 13,
'weekday' => 'wednesday',
'break' => 1,
),
2 =>
array (
'mid' => 12,
'centerid' => 1,
'sid' => 13,
'weekday' => 'monday',
'break' => 1,
),
3 =>
array (
'mid' => 17,
'centerid' => 1,
'sid' => 13,
'weekday' => 'monday',
'break' => 0,
),
);
usort($data, array($this,'cmp'));
我試過使用usort對其進行排序
function cmp($a, $b){
$a = strtotime($a['weekday']);
$b = strtotime($b['weekday']);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
但它不起作用並且混亂。 有人可以幫我嗎?
試試這個cmp
功能
function cmp($a, $b){
$a = date('N', strtotime($a['weekday']));
$b = date('N', strtotime($b['weekday']));
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
您可以編寫將日期名稱映射為數字並在cmp
函數中使用的函數:
<?php
$data =
array (
0 =>
array (
'mid' => 19,
'centerid' => 1,
'sid' => 13,
'weekday' => 'tuesday',
'break' => 1,
),
1 =>
array (
'mid' => 14,
'centerid' => 1,
'sid' => 13,
'weekday' => 'wednesday',
'break' => 1,
),
2 =>
array (
'mid' => 12,
'centerid' => 1,
'sid' => 13,
'weekday' => 'monday',
'break' => 1,
),
3 =>
array (
'mid' => 17,
'centerid' => 1,
'sid' => 13,
'weekday' => 'monday',
'break' => 0,
),
);
usort($data, array($this,'cmp'));
function getNumberOfDayByDayName($dayName)
{
$map = array(
'monday'=>1,
'tuesday'=>2,
'wednesday'=>3,
'thursday'=>4,
'friday'=>5,
'saturday'=>6,
'sunday'=>7,
);
return $map[$dayName];
}
function cmp($a, $b){
$a = getNumberOfDayByDayName($a['weekday']);
$b = getNumberOfDayByDayName($b['weekday']);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
echo '<pre>';
print_r($data);
echo '</pre>';
結果是:
Array
(
[0] => Array
(
[mid] => 17
[centerid] => 1
[sid] => 13
[weekday] => monday
[break] => 0
)
[1] => Array
(
[mid] => 12
[centerid] => 1
[sid] => 13
[weekday] => monday
[break] => 1
)
[2] => Array
(
[mid] => 19
[centerid] => 1
[sid] => 13
[weekday] => tuesday
[break] => 1
)
[3] => Array
(
[mid] => 14
[centerid] => 1
[sid] => 13
[weekday] => wednesday
[break] => 1
)
)
工作示例: CLICK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.