2016-03-15 94 views
0

這裏是我想按工作日排序的陣列(星期一到星期天) 我已經檢查了類似的問題,但是他們都沒有幫助解決這個問題。使用usort在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; 
} 

,但它不工作,是無序的。有人可以幫助我嗎?

+0

這就是你想要的嗎? https://eval.in/536794 – splash58

+0

我想在工作日排序這個數組。 – user3407278

回答

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; 
} 
+0

,完美的工作!謝謝! – user3407278

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

+0

謝謝,但另一種解決方案幫助我。 :) – user3407278

+0

我的解決方案也有效:)但@brevis給出的解決方案更好,做得好!@ brevis! – aslawin