2013-08-19 33 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