2013-04-27 104 views
-1

我想按值位置(只能是1或0),日期和时间排列多维数组。位置= 1的数组应该是第一个,它们应该按日期和时间排序。与位置的阵列= 0应附带位置= 1的那些之后,应该也按日期和时间PHP按3个值对多维数组进行排序

Array 
(
[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

那我想如何阵列是排序后进行分类:

Array 
(
[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

我已经尝试了一些功能,但没有任何的工作权利。无论是位置= 1的数组是最后一个还是所有数组只是按日期和时间排序。我无法自己弄清楚。 如果我的英语不好,请提前致谢并对不起。

+2

有数以百计的这种变化在这么问,和所有的解决方案涉及使用usort'的'。告诉我们你的尝试。 – Jon 2013-04-27 22:02:57

回答

1

当原始数据集是在一个名为$array数组...

$positions = $datetimes = array(); 

foreach($array as $k => $v) { 

    $positions[$k] = $v['position']; 
    $datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']); 

} 

array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array); 

基于比较数据,它看起来你想先按位置DESC排序,然后是时间(并假定日期也是这样)DESC,这就是它的作用。

工作例如:http://codepad.org/exc5Dhq8

+0

谢谢!它工作得很好:) – Kable 2013-04-27 22:28:00

+0

+1使用array_multisort。乍一看,我完全不明白你在做什么。阅读完文档后,现在已经很清楚了。我今天学到了东西 – 2013-04-27 22:35:39

1

看看函数usort(),它将一个数组和一个比较函数作为参数。

写comparaison功能,可以比较两个的数组元素:

  • 比较位置

  • 如果位置相等,则比较日期

  • 如果日期是相等的,那么比较时间

1

使用usort() - “之类的使用用户自定义的比较函数值的数组”

function your_func($a, $b) { 
    $pos = $b["position"] - $a["position"]; 
    if($pos) return $pos; 

    $date = strtotime($b["Date"]) - strtotime($a["Date"]); 
    if($date) return $date; 

    $time = strtotime($b["Time"]) - strtotime($a["Time"]); 
    return $time; 
} 
usort($arr, "your_func"); 
+1

位置= 1的数组应该是第一个。使用您的方法,您将在排序时首先得到0。 (来自doc:如果第一个参数分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数)。你应该返回 - $ pos。日期和时间也是如此,从例证中我们要求降序。 – 2013-04-27 22:20:03

+0

你对..刚刚编辑! – vlcekmi3 2013-04-27 22:38:22

相关问题