在PHP中排序多个数组

时间:2011-02-18 17:48:26

标签: php arrays multidimensional-array

有没有人知道如何在PHP中按键(日期)对此数组进行排序?

Array
(   
    [2011-02-16] => Array
        (
            [date] => 2011-02-16
            [num] => 2
        )

    [2011-02-11] => Array
        (
            [date] => 2011-02-11
            [num] => 0
        )

    [2011-02-17] => Array
        (
            [date] => 2011-02-17
            [num] => 0
        )

    [2011-02-18] => Array
        (
            [date] => 2011-02-18
            [num] => 0
        )

)

9 个答案:

答案 0 :(得分:7)

使用uasort功能,这是用户可自定义的排序。像这样:

function cmp($a, $b)
{
    if ($a['date'] == $b['date'])
    {
        return 0;
    }
    return ($a['date'] < $b['date']) ? -1 : 1;
}

uasort($your_array, "cmp");

答案 1 :(得分:2)

答案 2 :(得分:0)

当然可以。我昨天也回答了这个确切的帖子。

Sorting 2 arrays to get the highest in one and lowest in another

在你的情况下,它会像......

$myArray= subval_sort($myArray,'date'); 

function subval_sort($a,$subkey) {
    foreach($a as $k=>$v) {
        $b[$k] = strtolower($v[$subkey]);
    }
    asort($b);
    foreach($b as $key=>$val){
        $c[] = $a[$key];
    }
    return $c;
}

修改

shamittomar的答案虽然更好:)

答案 3 :(得分:0)

这应该可以帮助您了解PHP中数组排序的基础知识

http://www.the-art-of-web.com/php/sortarray/

这样的事情会解决你的问题:

usort($array, "cmp");

function cmp($a, $b){ 
    return strcmp($b['date'], $a['date']); 

答案 4 :(得分:0)

好吧,因为对键进行排序就可以了,ksort()对你有用!

但是如果你真的想对date元素进行排序,你可以使用uasort()和这样的排序函数

  function compare($a, $b)
  {
      if ($a['date']==$b['date']) return 0;
      return ($a['date']>$b['date'])?1:-1;
  }

  uasort($myarray, 'compare');

答案 5 :(得分:0)

由于您的数组已在密钥中包含日期,为什么不使用ksort?由于您使用的是YYYY-MM-dd格式,因此字符串比较应该可以正常工作。

答案 6 :(得分:0)

http://www.php.net/manual/en/function.array-multisort.php

示例#3是否适合您的需求?

答案 7 :(得分:0)

你想要的是UASORT。

http://us3.php.net/manual/en/function.uasort.php

功能就像:

function cmp($a, $b) {
    $d1 = strtotime($a['date']);
    $d2 = strtotime($b['date']);
    if ($d1 == $d2) {
       return 0;
    }
    return ($d1 < $d2) ? -1 : 1;
}

答案 8 :(得分:0)

更好的答案是使用uksort用于将用户定义的函数进行排序(考虑到这些日期并不总是可以比较如果没有先将ksort应用于密钥,则无法使用strtotime进行排序:

function sort_by_date_keys($date_key1, $date_key2) {
    // reverse the order of the $date_keys for "oldest to newest"
    return strtotime($date_key2) - strtotime($date_key1);
);

uksort($array, 'sort_by_date_keys');

此方法的定义比uasort更明确,因为它是为密钥量身定制的。

示例:

$array = array(
    '1/1/12' => 'foo1',
    '1/1/13' => 'foo2'
);
uksort($array, 'sort_by_date_keys');

// output
$array = array(
    '1/1/13' => 'foo2',
    '1/1/12' => 'foo1'
);