多维数组排序(理解ussort和MultiSort)


Sorting A Multi Dimensional Array (Understanding Usort and MultiSort)

我有一个数组,它是多个数据库表合并成所需信息的数组。我想按姓名的字母顺序对这些信息排序,如果是同名的,则按id排序。

我查看了以下所有主题,但无法产生工作结果。

  • 在PHP中排序多维数组
  • 对多维数组进行排序
  • 在PHP中排序多维数组
  • http://php.net/manual/en/function.usort.php

MY ARRAY as sudo dump

array(3){ 
    [0] => array(3){ 
        ['id'] => "1",  
        ['name'] => "Slippery Sasha", 
        ['type'] => "Electric Eel"
    }, 
    [1] => array(3){ 
        ['id'] => "2",  
        ['name'] => "Viscious Vipers", 
        ['type'] => "Snake"
    },
    [2] => array(3){ 
        ['id'] => "3",  
        ['name'] => "Finnic Fox", 
        ['type'] => "Rabid Fox"
    }, 
}

代码尝试

// Sort
        $sortByTypes = array('name', 'id', 'type');
        usort($returnArray, function($a, $b) use($sortByTypes){
            foreach($sortByTypes as $field){
                $sort = strnatcasecmp($a[$field], $a[$field]);
                if($sort !== 0){
                    break;
                }
            }
            return $sort;
        });

MY INTENDED DUMP

  array(3){ 
        [0] => array(3){ 
            ['id'] => "3",  
            ['name'] => "Finnic Fox", 
            ['type'] => "Rabid Fox"
        }, 
        [1] => array(3){ 
            ['id'] => "1",  
            ['name'] => "Slippery Sasha", 
            ['type'] => "Electric Eel"
        }, 
        [2] => array(3){ 
            ['id'] => "2",  
            ['name'] => "Viscious Vipers", 
            ['type'] => "Snake"
        },
    }

如果你能解释一下它是如何工作的,以及它是如何对数组进行排序的,让我更好地理解这个功能,那就太棒了!

您可以使用usort作为

usort($arr,function($a,$b){
    $c = strcasecmp($a['name'], $b['name']);
    $c .= $a['id'] - $b['id'];
    return $c;
});
print_r($arr);