PHP按键多维数组排序

时间:2019-08-27 06:29:39

标签: php sorting

假设我有一个数组

@Html.DropDownListFor(x => x.Task_Status_Code, Model.TaskStatus, new {  @class = "form-control", @disabled = "disabled" })

如何通过关键示例(彼得)对多维数组进行排序。我尝试使用

array(8) {
  [0] =>
  array(1) {
    'Peter' =>
    int(4)
  }
  [1] =>
  array(1) {
    'Piper' =>
    int(4)
  }
  [2] =>
  array(1) {
    'picked' =>
    int(4)
  }
  [3] =>
  array(1) {
    'peck' =>
    int(4)
  }
  [4] =>
  array(1) {
    'pickled' =>
    int(4)
  }

但是它只是返回一个布尔值

我想要的输出

ksort($arr);

该数组应按键和升序排序。

3 个答案:

答案 0 :(得分:1)

用usort排序,请检查demo

usort($array,function($a,$b){
    return strcmp(strtolower(key($a)),strtolower(key($b)));
});

答案 1 :(得分:0)

ksort()方法执行就地排序。因此,尽管它仅返回一个布尔值(如您正确指出的那样),但它会将$arr中的值按排序顺序进行了突变。请注意,根据您的预期输出,您似乎要进行不区分大小写的搜索。为此,您需要使用SORT_FLAG_CASE排序标志。因此,您不必使用ksort($arr),而不必调用ksort($arr, SORT_FLAG_CASE)。您可以在sort() method's documentation中查看ksort()如何使用排序标志。希望有帮助!

答案 2 :(得分:0)

您可以这样做,

$temp = array_map(function($a){
    return key($a); // fetching all the keys
}, $arr);
natcasesort($temp); // sorting values case insensitive
$result = [];
// logic of sorting by other array
foreach($temp as $v){
    foreach($arr as $v1){
        if($v == key($v1)){
            $result[] = $v1;
            break;
        }        
    }
}

Demo

输出

Array
(
    [0] => Array
        (
            [peck] => 4
        )

    [1] => Array
        (
            [Peter] => 4
        )

    [2] => Array
        (
            [picked] => 4
        )

    [3] => Array
        (
            [pickled] => 4
        )

    [4] => Array
        (
            [Piper] => 4
        )

)