首頁 >php教程 >php手册 >简单的php二维数组多元素排序实例

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

WBOY
WBOY原創
2016-05-22 18:38:471128瀏覽

php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位。

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

代码区:

<?php
function multipleArraySort($old_arr, $arr1, $arr2) {
    //排序第一个元素
    $old_arr = array_sort($old_arr, $arr1[0], $arr1[1]);
    $temp_array = $new_temp_array = array();
    foreach ($old_arr as $k => $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 = &#39;asc&#39;) {
    $keysvalue = $new_array = array();
    //获取元素值,生成新数组
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }
    //排序,默认为正序
    if ($type == &#39;asc&#39;) {
        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(
        &#39;id&#39; => 1,
        &#39;sort&#39; => 1,
        &#39;date&#39; => &#39;1405648791&#39;
    ) ,
    array(
        &#39;id&#39; => 2,
        &#39;sort&#39; => 1,
        &#39;date&#39; => &#39;1405649791&#39;
    ) ,
    array(
        &#39;id&#39; => 3,
        &#39;sort&#39; => 2,
        &#39;date&#39; => &#39;1405647791&#39;
    ) ,
);
$arr1 = array(
    &#39;sort&#39;,
    &#39;desc&#39;
);
$arr2 = array(
    &#39;date&#39;,
    &#39;desc&#39;
);
$newArr = multipleArraySort($old_arr, $arr1, $arr2);
var_dump($newArr);

//打印结果:

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn