Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对包含数组的数组进行排序?_Php_Arrays_Sorting - Fatal编程技术网

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');