如何通过嵌套在里面的元素对PHP数组进行排序?

gee*_*guy 36 php arrays sorting usort multidimensional-array

我有一个如下数组:

Array
(
    [0] => Array
        (
            'name' => "Friday"
            'weight' => 6
        )
    [1] => Array
        (
            'name' => "Monday"
            'weight' => 2
        )
)

我想获取该数组中的最后一个值('weight'),并使用它来对主数组元素进行排序.所以,在这个数组中,我想对它进行排序,以便'Monday'元素出现在'Friday'元素之前.

cod*_*ict 40

您可以使用usort:

function cmp($a, $b) {
   return $a['weight'] - $b['weight'];
}

usort($arr,"cmp");
Run Code Online (Sandbox Code Playgroud)

  • 你可以简单地使用`return $ a ['weight'] - $ b ['weight'];`. (3认同)

Geo*_*Geo 7

可以使用匿名函数完成.

此外,如果您的'weight'是一个字符串,请使用其他一个返回(请参阅注释掉的行):

<?php

$arr = array(
    0 => array (
        'name'   => 'Friday',
        'weight' => 6,
    ),
    1 => array (
        'name'   => 'Monday',
        'weight' => 2,
    ),
);

// sort by 'weight'
usort($arr, function($a, $b) { // anonymous function
    // compare numbers only
    return $a['weight'] - $b['weight'];

    // compare numbers or strings
    //return strcmp($a['weight'], $b['weight']);

    // compare numbers or strings non-case-sensitive
    //return strcmp(strtoupper($a['weight']), strtoupper($b['weight']));
});

var_export($arr);

/*
array (
    0 => array (
        'name'   => 'Monday',
        'weight' => 2,
    ),
    1 => array (
        'name'   => 'Friday',
        'weight' => 6,
    ),
)
*/
Run Code Online (Sandbox Code Playgroud)


Ric*_*tte 5

您还可以使用匿名函数。

usort($items, function($a, $b) {
    return $a['name'] > $b['name'];
});
Run Code Online (Sandbox Code Playgroud)