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

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

WBOY
WBOYOriginal
2016-05-22 18:38:471128Durchsuche

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);

//打印结果:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn