使用子节点进行PHP数组排序?

时间:2010-10-19 09:14:41

标签: php arrays multidimensional-array

好的我有以下数组:

Array
(
   [0] => Array
    (
        [id] => 6
        [name] => This Course
        [time] => 1288082700
        [description] => blah blah . 
        [link] => http://this.com/?g=5
        [course] => 22
    )

[1] => Array
    (
        [id] => 2
        [name] => Workshop
        [time] => 1287561600
        [description] => This description
        [link] => http://this.com/?g=5
        [session] => 8
        [course] => 23
        [type] => standard
        [adobelink] => 
    )

如何使用内部'time'键对整个数组进行排序?

谢谢!

5 个答案:

答案 0 :(得分:5)

您可以将usort功能用作:

function cmp($a,$b) {
        return $a['time'] - $b['time'];
}

usort($arr,'cmp');

Working link

答案 1 :(得分:4)

使用usort()

  

此函数将使用用户提供的比较函数按其值对数组进行排序。如果要排序的数组需要按照一些非平凡的标准进行排序,则应使用此函数。

示例:

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

usort($array, 'cmp');

当然,如果数组没有time元素,这将失败。应该怎么做取决于你的要求,所以我会把错误处理留给你;)

答案 2 :(得分:3)

使用PHP usort()函数:http://php.net/manual/en/function.usort.php

首先,定义一个决定数据结构比较结果的函数:

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

然后调用usort()并将函数的nmae赋予它:

usort($array, "cmp");

你已经完成了!

答案 3 :(得分:2)

uasort()maintain your keys 1

uasort($a, function($a, $b) {
    $a = $a['time']; // Assuming keys exist
    $b = $b['time'];
    if ($a == $b) {
        return 0;
    } else {
        return $a < $b ? -1 : 1; // Reverse < if sort order is wrong
    }
});

匿名函数语法需要PHP 5.3 + !如果&lt; 5.3(参见其他答案),则传递比较函数的名称。

1)如果你关心钥匙的话。如果没有,只需使用上面丰富的usort()方法:)比较函数基本相同(除了@ codaddict的elegant approach)。

答案 4 :(得分:1)

http://dk.php.net/usort

function sortByTime($a, $b)
{
 if ($a['time'] > $b['time'])
 {
  return 1;
 }
 else if ($a['time'] < $b['time'])
 {
  return -1;
 }
 return 0;
}

usort($yourArray, 'sortByTime');