2013-08-19 60 views
0

我有這樣的示例性陣列,我想在這個順序中的每個第一級項(660006600166002)分類:New Store第一列表中,Store Relocation在列表中第二和在示例數組中,我沒有包含Underperforming Stores,但這些將是最後一個。那麼那些需要按open日期進行排序我該如何對它們進行排序?排序多維陣列由一個定義的順序

我相信我需要使用usort來完成這個任務,但我並不真正瞭解usort函數,我可以得到這個幫助嗎?

這裏是我的功能,那麼遠,

usort($mainpgArr, function($a, $b){ 

}); 

例原數組:

Array(
    [66000] => Array(
     [January] => Array(
      [status] => New Store 
      [sales] => 100.00 
      [open] => 2013-05-01 
     ) 
     [February] => Array(
      [status] => New Store 
      [sales] => 200.00 
      [open] => 2013-05-01 
     ) 
     [March] => Array(
      [status] => New Store 
      [sales] => 140.00 
      [open] => 2013-05-01 
     ) 
    ) 
    [66001] => Array(
     [January] => Array(
      [status] => Store Relocation 
      [sales] => 3400.00 
      [open] => 2013-07-01 
     ) 
     [February] => Array(
      [status] => Store Relocation 
      [sales] => 1340.00 
      [open] => 2013-07-01 
     ) 
     [March] => Array(
      [status] => Store Relocation 
      [sales] => 1550.00 
      [open] => 2013-07-01 
     ) 
    ) 
    [66002] => Array(
     [January] => Array(
      [status] => New Store 
      [sales] => 1050.00 
      [open] => 2013-01-01 
     ) 
     [February] => Array(
      [status] => New Store 
      [sales] => 1009.00 
      [open] => 2013-01-01 
     ) 
     [March] => Array(
      [status] => New Store 
      [sales] => 1020.00 
      [open] => 2013-01-01 
     ) 
    ) 
) 

例決賽陣列

Array(
    [66002] => Array(
     [January] => Array(
      [status] => New Store 
      [sales] => 1050.00 
      [open] => 2013-01-01 
     ) 
     [February] => Array(
      [status] => New Store 
      [sales] => 1009.00 
      [open] => 2013-01-01 
     ) 
     [March] => Array(
      [status] => New Store 
      [sales] => 1020.00 
      [open] => 2013-01-01 
     ) 
    ) 
    [66000] => Array(
     [January] => Array(
      [status] => New Store 
      [sales] => 100.00 
      [open] => 2013-05-01 
     ) 
     [February] => Array(
      [status] => New Store 
      [sales] => 200.00 
      [open] => 2013-05-01 
     ) 
     [March] => Array(
      [status] => New Store 
      [sales] => 140.00 
      [open] => 2013-05-01 
     ) 
    ) 
    [66001] => Array(
     [January] => Array(
      [status] => Store Relocation 
      [sales] => 3400.00 
      [open] => 2013-07-01 
     ) 
     [February] => Array(
      [status] => Store Relocation 
      [sales] => 1340.00 
      [open] => 2013-07-01 
     ) 
     [March] => Array(
      [status] => Store Relocation 
      [sales] => 1550.00 
      [open] => 2013-07-01 
     ) 
    ) 
) 
+0

究竟是什麼關於'usort'你不明白嗎?有php.net上的例子,你看過他們嗎?你有沒有嘗試過一些簡單的方法讓你的腳先溼? – Jon

回答

0

所有你需要做的在usort中是如何定義的應訂購2個給定項目。

在你的情況下,如果你的數組數據被整理了一下,通過從月份數據中取出狀態,會更容易。現在,我們不得不假定所有月份都是一樣的。

由於這個假設,我們將使用第一個月的狀態來進行比較。

usort($mainpgArr, function($a, $b){ 
    if ($a[0]['status'] == $b[0]['status']) { 
     // status equal so sort by open date 
     if ($a[0]['open'] == $b[0]['open']) { 
      return 0; 
     } else { 
      return ($a[0]['open'] > $b[0]['open']) ? 1 : -1; 
     } 
    } else { 
     // sorting by status 
     // we can use a simple comparison operation as your desired order happens to be alphabetical 
     return ($a[0]['status'] > $b[0]['status']) ? 1 : -1; 
    } 
}); 

如果密鑰對你很重要,你就需要look at using uasort作爲usort不保留鍵。

-1

你不正確。

這是非常簡單的: http://www.php.net/manual/en/function.ksort.php

ksort($mainpgArr); 

而這一切,鄉親。現在$ mainpgArr按照你想要的方式排序。對多維部分進行排序可以使用asort();


對不起,誤解了這個問題。好的,你需要用ksort()對鍵進行排序。然後通過整個事情創建與排序鍵,在ASORT()索引中的新數組循環..

例如:

ksort($mainpgArr); 
foreach($mainpgArr as $key => $value) { 
    asort($mainpgArr[$key]; 
} 

應該這樣做。對不起,我之前沒有更具體。 (我沒有測試過這個,但應該可以工作)

+0

什麼?這是否應該使用魔法精靈塵埃正確排序? – Jon

+0

沒有神奇的小精靈灰塵夥計,asort()按字母順序對數組進行排序,並且arsort()對其進行反向排序。真的很簡單。我將擴大我的答案,因爲它是多維的 –

+1

在擴大答案的同時,強調「asort」和「arsort」永遠不能在這裏工作,因爲a)這個數組是多維的,b)他們不能同時使用多個標準。多德。 – Jon