在 PHP 中对多维数组进行排序

问题描述 投票:0回答:3

我有一个“简单”的多维数组,如下所示:

array(3) {
  ["user 1"]=>
  array(4) {
    [0]=>
    array(1) {
      ["item 4"]=>
      string(5) "11385"
    }
    [1]=>
    array(1) {
      ["item 2"]=>
      string(6) "144268"
    }
    [2]=>
    array(1) {
      ["item 1"]=>
      string(5) "65774"
    }
    [3]=>
    array(1) {
      ["item 9"]=>
      string(5) "98523"
    }
  }
  ["user 5"]=>
  array(1) {
    [0]=>
    array(1) {
      ["item 8"]=>
      string(6) "239233"
    }
  }
  ["user 2"]=>
  array(2) {
    [0]=>
    array(1) {
      ["item 4"]=>
      string(5) "53718"
    }
    [1]=>
    array(1) {
      ["item 1"]=>
      string(6) "154687"
    }
  }
}

我需要做的就是首先按用户对数组进行排序,然后按项目排序。上升。我怎么能这样做呢?如果需要的话我会提供一些代码:)

谢谢!

php sorting multidimensional-array
3个回答
5
投票

ksort
按键排序

$newArray = array();

# start by sorting users
$yourArray = ksort($yourArray);

# then sort sub items
foreach($yourArray as $user=>$theirItems) {
    $theirItems = ksort($theirItems); # assuming you still want to sort by key;
    $newArray[$user] = $theirItems;
}

var_dump($newArray);

0
投票

使用

usort()
然后创建两个比较函数并使用它们对数组进行一一排序。


0
投票

要按第一级键排序,然后按每个子数组中 firat 元素的键排序,请调用

ksort()
,然后按单独元素的键在每组数据中排序。

代码:(演示

ksort($array);
foreach ($array as &$v) {
    usort(
        $v,
        fn($a, $b) => key($a) <=> key($b)
    );
}
var_export($array);

或者使用

array_myltisort()
来减少总迭代函数调用:(Demo)

ksort($array);
foreach ($array as &$v) {
    array_multisort(
        array_map('key', $v),
        $v
    );
}
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.