Php 如何对包含数组的数组进行排序?
可能重复:Php 如何对包含数组的数组进行排序?,php,arrays,sorting,Php,Arrays,Sorting,可能重复: 我有以下数组结构: $en_array = array(); while(...) { $en_array[] = $row; } $en_array = array ( array ( "name" => "a", "followers" => 5, "imageurl" => "http://images.com/img.jpg" ) array ( "nam
我有以下数组结构:
$en_array = array();
while(...) {
$en_array[] = $row;
}
$en_array = array (
array (
"name" => "a",
"followers" => 5,
"imageurl" => "http://images.com/img.jpg"
)
array (
"name" => "b",
"followers" => 25,
"imageurl" => "http://images.com/img.jpg"
)
array (
"name" => "c",
"followers" => 15,
"imageurl" => "http://images.com/img.jpg"
)
)
在本例中,我希望根据跟随者的值对en数组的键进行排序,例如,$en_数组[0][“followers”]
的值为25
我不完全确定这是否能做到,但我希望能做到
任何帮助都将不胜感激:) 就是你想要的
foreach ($en_array as $key => $row) {
$name[$key] = $row['name'];
$followers[$key] = $row['followers'];
}
array_multisort($followers,SORT_DESC,$name,SORT_ASC,$en_array);
之后,结果按跟随者的降序排列,如果跟随者相同,则按名称的升序排列(即字母顺序)。由于您似乎只对跟随者排序感兴趣,因此我们可以使用PHP的
排序的核心是将数组中的元素相互比较,找出哪些元素比其他元素大
usort
允许您在此过程中使用自定义比较函数:compare by_followers($a,$b)
返回-1
如果$a['followers']
大于$b['followers']
(意味着$a
应该在$b
之前),如果$a['followers']大于则返回1
小于$b['followers']
(意思是$a
应该在$b
之后),如果它们相等,则返回0
。所以我们是按followers排序的,那么?是的,纯粹是按followers:)。请注意,我的第一个答案草稿是向后的,并按升序排序的。如果要查找降序,请使用新代码段。(唯一的区别是我将函数中的
替换为code>
)谢谢,特别是对您的解释!!因此,我认为它通过比较每个数组来逐渐过滤(我不确定$a
和$b
代表什么)?
function compare_by_followers($a, $b) {
if($a['followers'] == $b['followers']) return 0;
return $a['followers'] > $b['followers'] ? -1 : 1;
}
usort($en_array, 'compare_by_followers');