我有这种数组
array(5) {
[0]=>
array(5) {
[0]=>
string(7) "jannala"
[1]=>
string(10) "2009-11-16"
[2]=>
string(29) "
<p>Jotain mukavaa.</p>
"
[3]=>
int(12)
[4]=>
int(1270929600)
}
[1]=>
array(5) {
[0]=>
string(7) "jannala"
[1]=>
string(10) "2009-11-16"
[2]=>
string(51) "
<p>Saapumiserä II/09 astuu palvelukseen</p>
"
[3]=>
int(11)
[4]=>
int(1270929600)
}
...
}
我需要做的是根据数组的[x] [4](unix时间戳值)对数组进行排序。我怎么做到这一点?
答案 0 :(得分:10)
使用比较函数,在这种情况下,它比较数组的unix时间戳值:
function compare($x, $y) {
if ( $x[4] == $y[4] )
return 0;
else if ( $x[4] < $y[4] )
return -1;
else
return 1;
}
然后使用usort
函数调用它:
usort($nameOfArray, 'compare');
此函数将使用用户提供的比较函数按其值对数组进行排序。如果要排序的数组需要按一些非平凡的标准排序,则应使用此功能。
取自PHP: usort手册。
答案 1 :(得分:0)
我最初的想法是:将每个嵌套数组包装在一个对象(类的实例)中,这样一旦按特定字段排序(在本例中为unix时间戳),就可以轻松访问其他信息使用相同的对象引用。
因此,嵌套的数组数组可能会成为一个对象数组,每个对象都有一个“排序”方法。
答案 2 :(得分:0)
我正在努力使用上面的“比较”功能,但能够让this工作:
function cmp($a, $b)
{
if ($a['4'] == $b['4']) {
return 0;
}
return ($a['4'] > $b['4']) ? -1 : 1;
}
usort($array, "cmp");
(请注意,这也是降序,而不是升序排序。)