php 二维数组如何按一维数组里order值进行排序,同时又不改变原来order值相同的数组顺序

php 二维数组如何按一维数组里order值进行排序,同时又不改变原来order值相同的数组顺序

1、先按照order值进行分组,但它们还要保持之前的顺序
2、然后分组按照order值从小到大排序
3、再把这些数组组装在一个二维数组里

PS:把下面的第一个二维数组弄成第二个的那种格式就可以了

array(18) {
  [0] => array(3) {
    ["id"] => string(5) "ele_0"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [1] => array(3) {
    ["id"] => string(5) "ele_1"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [2] => array(3) {
    ["id"] => string(5) "ele_2"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [3] => array(3) {
    ["id"] => string(5) "ele_4"
    ["order"] => string(1) "3"
    ["title"] => NULL
  }
  [4] => array(3) {
    ["id"] => string(5) "ele_5"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [5] => array(3) {
    ["id"] => string(5) "ele_6"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [6] => array(3) {
    ["id"] => string(5) "ele_7"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [7] => array(3) {
    ["id"] => string(5) "11329"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [8] => array(3) {
    ["id"] => string(5) "11330"
    ["order"] => string(1) "7"
    ["title"] => NULL
  }
  [9] => array(3) {
    ["id"] => string(4) "8252"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
}
array(18) {
  [0] => array(3) {
    ["id"] => string(5) "ele_0"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [1] => array(3) {
    ["id"] => string(5) "ele_1"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [2] => array(3) {
    ["id"] => string(5) "ele_2"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [9] => array(3) {
    ["id"] => string(4) "8252"
    ["order"] => string(1) "1"
    ["title"] => NULL
  }
  [4] => array(3) {
    ["id"] => string(5) "ele_5"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [5] => array(3) {
    ["id"] => string(5) "ele_6"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [6] => array(3) {
    ["id"] => string(5) "ele_7"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [7] => array(3) {
    ["id"] => string(5) "11329"
    ["order"] => string(1) "2"
    ["title"] => NULL
  }
  [3] => array(3) {
    ["id"] => string(5) "ele_4"
    ["order"] => string(1) "3"
    ["title"] => NULL
  }
  [8] => array(3) {
    ["id"] => string(5) "11330"
    ["order"] => string(1) "7"
    ["title"] => NULL
  }
}
胡说叔叔
浏览 508回答 3
3回答

森林海

$arr[] = array('order' => 1, 'id' => 'ele_0'); $arr[] = array('order' => 1, 'id' => 'ele_2'); $arr[] = array('order' => 1, 'id' => 'ele_1'); $arr[] = array('order' => 3, 'id' => 'ele_4'); $arr[] = array('order' => 2, 'id' => 'ele_6'); $arr[] = array('order' => 2, 'id' => 'ele_5'); foreach ($arr as $key => $row) { $order[$key] = $row['order']; $arr[$key]['sort'] = $key; //要保证其他顺序和原来一样,只能再加一个字段标识原来的顺序 $sort[$key] = $key; } array_multisort($order, SORT_ASC, $sort, SORT_ASC , $arr); print_r($arr);

慕神8447489

你可以将key和value['id']互换,先将key放入到value中,排序结束后再替换回来

慕姐4208626

实际跟一维数组排序是一个道理,随便应用一个排序算法,就能实现你要的结果。 具体范例 对以下数组进行排序: $arr = [ [ 'id' => 'ele_0' , 'order' => 60 , ] , [ 'id' => 'ele_1' , 'order' => 30 , ] , [ 'id' => 'ele_2' , 'order' => 50 , ] , ]; 使用 选择排序 算法: for ($i = 0; $i < count($arr); ++$i) { $index = $i; for ($n = $i + 1; $n < count($arr); ++$n) { $one = $arr[$index]; $two = $arr[$n]; // 降序排序 if ($one['order'] < $two['order']) { $index = $n; } } if ($index != $i) { $tmp = $arr[$index]; $arr[$index] = $arr[$i]; $arr[$i] = $tmp; } } // 查看排序后的结果 print_r($arr);
打开App,查看更多内容
随时随地看视频慕课网APP