查看演示:http://codepad.org/vDI2k4n6
$arrayMonths = array(
'jan' => array(1, 8, 5,4),
'feb' => array(10,12,15,11),
'mar' => array(12, 7, 4, 3),
'apr' => array(10,16,7,17),
);
$position = array("Foo1","Foo2","Foo3","FooN");
$set = array();
foreach($arrayMonths as $key => $value)
{
$max = max($value);
$pos = array_search($max, $value);
$set[$key][$position[$pos]] = $max ;
}
function cmp($a, $b)
{
foreach($a as $key => $value )
{
foreach ($b as $bKey => $bValue)
{
return $bValue - $value ;
}
}
}
uasort($set,"cmp");
var_dump($set);
输出
array
'apr' =>
array
'FooN' => int 17
'feb' =>
array
'Foo3' => int 15
'mar' =>
array
'Foo1' => int 12
'jan' =>
array
'Foo2' => int 8
另一个例子:
使用PHP对多维数组进行排序
http://www.firsttube.com/read/sorting-a-multi-dimensional-array-with-php/
有时候我会遇到一个多维数组,我想按子数组中的某个值进行排序。我的数组可能看起来像这样:
$songs = array(
'1' => array('artist'=>'The Smashing Pumpkins', 'songname'=>'Soma'),
'2' => array('artist'=>'The Decemberists', 'songname'=>'The Island'),
'3' => array('artist'=>'Fleetwood Mac', 'songname' =>'Second-hand News')
);
问题是这样的:我想以“歌曲名(艺术家)” 的格式打印出我喜欢的歌曲,而且我想按照艺术家的字母顺序排序。在 PHP 中提供了许多函数来对数组进行排序,但它们都不适用于此处。 ksort() 可以按键进行排序,但 $songs 数组中的键是无关紧要的。 asort() 允许保留键并对 $songs 进行排序,但它将按每个元素的值排序,这也是无用的,因为每个元素的值都是“array()”。 usort() 是另一个可能的选项,并且可以进行多维排序,但它涉及构建回调函数,通常非常冗长。 即使在 PHP 文档中的示例引用了特定的键。
因此,我开发了一个快速函数来按子数组中键的值进行排序。请注意,此版本进行了不区分大小写的排序。请参见下面的 subval_sort()。
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;
}
要在上面使用它,我只需键入:
$songs = subval_sort($songs,'artist');
print_r($songs);
这是你应该期望看到的内容:
Array
(
[0] => Array
(
[artist] => Fleetwood Mac
[song] => Second-hand News
)
[1] => Array
(
[artist] => The Decemberists
[song] => The Island
)
[2] => Array
(
[artist] => The Smashing Pumpkins
[song] => Cherub Rock
)
)
按艺术家排序的歌曲。
relativeOrder
,然后执行类似于SELECT name FROM countries ORDER BY relativeOrder
的操作。 - Pateman