欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

简单的php二维数组多元素排序实例

程序员文章站 2022-05-06 14:27:25
...
php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位。

写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序。

代码区:

 $v) {
        $key_count = count($old_arr) - 1;
        //第一个元素数相等,放入临时数组
        if ($v[$arr1[0]] == $old_arr[$k - 1][$arr1[0]] || empty($temp_array)) {
            $temp_array[$k] = $v;
        }
        if (($v[$arr1[0]] != $old_arr[$k - 1][$arr1[0]] && !empty($temp_array)) || $key_count == $k) {
            //添加最新元素
            $temp_array[$k] = $v;
            //数组大于1时,进行排序处理
            if (count($temp_array) > 1) {
                if ($key_count != $k) {
                    //删除最后一个(与上一个不相等元素)
                    unset($temp_array[$k]);
                }
                //不是最后或者最后相同,进行排序
                if ($key_count != $k || $v[$arr1[0]] == $old_arr[$k - 1][$arr1[0]]) {
                    //排序第二个元素
                    $temp_array = array_sort($temp_array, $arr2[0], $arr2[1]);
                }
                //排序后把排序的数组,插入原数组排序前位置
                $count = count($new_temp_array) == 0 ? 0 : count($new_temp_array);
                foreach ($temp_array as $val_t) {
                    $new_temp_array[$count] = $val_t;
                    $count++;
                }
                //写入新数组后清空原数组
                $temp_array = array();
                //添加最新元素
                $temp_array[$k] = $v;
            }
        }
    }
    return $new_temp_array;
}
//根据数组元素排序
function array_sort($arr, $keys, $type = 'asc') {
    $keysvalue = $new_array = array();
    //获取元素值,生成新数组
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }
    //排序,默认为正序
    if ($type == 'asc') {
        asort($keysvalue);
    } else {
        arsort($keysvalue);
    }
    reset($keysvalue);
    $count_s = 0;
    //恢复键值
    foreach ($keysvalue as $k => $v) {
        $new_array[$count_s] = $arr[$k];
        $count_s++;
    }
    return $new_array;
}
//调用方法:
$old_arr = array(
    array(
        'id' => 1,
        'sort' => 1,
        'date' => '1405648791'
    ) ,
    array(
        'id' => 2,
        'sort' => 1,
        'date' => '1405649791'
    ) ,
    array(
        'id' => 3,
        'sort' => 2,
        'date' => '1405647791'
    ) ,
);
$arr1 = array(
    'sort',
    'desc'
);
$arr2 = array(
    'date',
    'desc'
);
$newArr = multipleArraySort($old_arr, $arr1, $arr2);
var_dump($newArr);

//打印结果:

简单的php二维数组多元素排序实例

相关标签: foreach