为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡说叔叔 2019-03-08 07:48:19
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 } }
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

$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);
查看完整回答
反对 回复 2019-03-18
?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

查看完整回答
反对 回复 2019-03-18
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

实际跟一维数组排序是一个道理,随便应用一个排序算法,就能实现你要的结果。

具体范例

对以下数组进行排序:

$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);
查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 507 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信