Php 按键排序数组
有人能帮我吗?我想订购这个多维数组项目[] 按“rel”键Php 按键排序数组,php,Php,有人能帮我吗?我想订购这个多维数组项目[] 按“rel”键 print_r ($items) will output: Array( [36] => Array ( [id] => 36 [name] => mp4 [total_items] => 58 [rel] => 5.3015 ) [61] => Array ( [id] =>
print_r ($items) will output:
Array(
[36] => Array
(
[id] => 36
[name] => mp4
[total_items] => 58
[rel] => 5.3015
)
[61] => Array
(
[id] => 61
[name] => mp3
[total_items] => 61
[rel] => 21.7269
)
[63] => Array
(
[id] => 63
[name] => avi
[total_items] => 43
[rel] => 2.254
)
)
而我需要的是:先[61]秒[36],然后[63]
谢谢大家! 以下是我使用的:
function array_sort(&$array, $on, $order=SORT_ASC)
{
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
所以你可以这样使用它:
array_sort($items, 'rel');
有一个函数,它被调用 请参阅的文档中的第一个和第二个示例,并对其进行调整,可能如下所示:
function cmp($a, $b)
{
if ($a['rel'] == $b['rel']) {
return 0;
}
return ($a['rel'] < $b['rel']) ? -1 : 1;
}
uasort($your_array, "cmp");
函数cmp($a,$b)
{
如果($a['rel']=$b['rel']){
返回0;
}
回报($a['rel']<$b['rel'])?-1:1;
}
uasort($your_数组,“cmp”);
有帮助吗
编辑:
此外,如果您的PHP版本高于5.3,则可以使用:
uasort($u数组,函数($a,$b){
如果($a['rel']=$b['rel']){
返回0;
}
回报($a['rel']<$b['rel'])?-1:1;
});
EDIT2:
我犯了一个错误:usort()
用于排序,但没有维护键关联(请参阅),uasort()
函数就是您所需要的。我已经更正了上面的示例。尝试usort()
,编写您自己的小回调比较函数
这基本上只是对单个数组进行排序,否?否:“array_multisort()可用于同时对多个数组进行排序,或按一个或多个维度对多维数组进行排序。”参考:这是一个多维数组。
$a['rel']
是如何存在的?$a
和$b
只是已排序数组的元素。因为这些元素本身就是数组,所以它们也有键(除非它们是空的)——在本例中,数组的每个元素都有rel
key。是否足够清楚?考虑到人们在这里要求它的频率,应该将其添加到php的标准库中。@PMV他们要求,因为他们不阅读文档;)有一个函数允许您在不需要太多代码的情况下执行此操作。使用它更简单。@Tadek,您只能在更新版本的中使用anon函数php@Neal但是你可以使用usort()
,因为PHP4,而PHP5.3现在已经很老了(在2009年上半年发布)-算了吧,它肯定不是什么“新的”@Neal更正:在这种情况下,它是关于uasort()
函数的。
function cmp($a, $b)
{
if ($a['rel'] == $b['rel']) {
return 0;
}
return ($a['rel'] < $b['rel']) ? -1 : 1;
}
uasort($your_array, "cmp");
uasort($your_array, function($a, $b){
if ($a['rel'] == $b['rel']) {
return 0;
}
return ($a['rel'] < $b['rel']) ? -1 : 1;
});