如何根据其中一个值对关联数组进行排序?
例如:
$arr = array(
'ted' => array( 'age' => 27 ),
'bob' => array( 'age' => 18 ),
'jay' => array( 'age' => 24 )
);
$arr = ???
foreach ($arr as $person)
echo $person['age'], ', ';
因此输出为:
18, 24, 27
这是一个过于简单的例子,只是为了证明我的问题。
我仍然要求$arr
是一个关联数组。
答案 0 :(得分:7)
uasort()
函数允许你指定一个回调函数,它将负责两个元素之间的比较 - 所以,如果你实现了正确的回调函数,应该做得很好。
在这里,您必须实现一个将接收两个数组的回调函数 - 并对age
项进行压缩:
function callback($a, $b) {
if ($a['age'] > $b['age']) {
return 1;
} else if ($a['age'] < $b['age']) {
return -1;
}
return 0;
}
在以下代码部分中使用该函数:
$arr = array(
'ted' => array( 'age' => 27 ),
'bob' => array( 'age' => 18 ),
'jay' => array( 'age' => 24 )
);
uasort($arr, 'callback');
var_dump($arr);
你会得到这个结果数组:
array
'bob' =>
array
'age' => int 18
'jay' =>
array
'age' => int 24
'ted' =>
array
'age' => int 27
答案 1 :(得分:7)
这是PHP 5.3匿名函数派上用场的经典示例:
uasort($arr, function($a, $b) {
return $a['age'] - $b['age'];
});
$a['age'] - $b['age']
是一个小技巧。它的工作原理是因为回调函数应该返回一个值&lt; 0 $a
小于$b
且值>&gt;如果$a
大于$b
,则为0。
答案 2 :(得分:1)
http://www.php.net/manual/en/array.sorting.php
这个特例将涉及使用一种使用回调进行排序的排序方法
答案 3 :(得分:1)
由于您要对子数组中的值进行排序,因此没有内置函数可以完成100%的工作。我会用:
进行用户定义的排序http://www.php.net/manual/en/function.uasort.php
这是一个示例比较函数,它根据嵌套数组中的这个值返回它的比较
<?php
// Comparison function
function cmp($left, $right) {
$age1 = $left['age'];
$age2 = $right['age'];
if ($age1 == $age2) {
return 0;
}
return ($age1 < $age2) ? -1 : 1;
}
uasort($array, 'cmp');
答案 4 :(得分:0)
您不只是对关联数组进行排序,而是对关联数组的关联数组进行排序;)
uasort电话就是你所追求的
uasort($array, function ($a, $b) {
if ($a['age'] === $b['age']) {
return 0;
}
return $a['age'] > $a['age'] ? 1 : -1;
});