首页 > php数组 > PHP二维数组排序问题详解(数组键值排序)

PHP二维数组排序问题详解(数组键值排序)

根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧.

但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了.

实例一,代码如下:

<?php
$arr = array(
    array(
        'sort' => 3,
        'a' => 'a',
        'b' => 'b'
    ) ,
    array(
        'sort' => 5,
        'a' => 'a',
        'b' => 'b'
    ) ,
    array(
        'sort' => 1,
        'a' => 'a',
        'b' => 'b'
    )
);
?>

这样array_multisort()不不能生效了,我们可以对函数进行升级一下,根据指定键值进行排序,代码如下:

<?php
function array_sort($arr, $key1, $sort1 = 'asc', $key2 = '', $sort2 = 'asc') {
    if (!is_array($arr)) {
        return $arr;
    }
    foreach ($arr AS $key => $row) {
        $temp[$key] = $row[$key1];
    }
    $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC;
    if (!$key2) {
        array_multisort($temp, $sort1, $arr);
    } else {
        foreach ($arr AS $key => $row) {
            $temp2[$key] = $row[$key2];
        }
        $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC;
        array_multisort($temp, $sort1, $temp2, $sort2, $arr);
    }
    return $arr;
}
?>

实例二,代码如下:

<?php
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);
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}
$array = array(
    array(
        'name' => '手机',
        'brand' => '诺基亚',
        'price' => 1050
    ) ,
    array(
        'name' => '笔记本电脑',
        'brand' => 'lenovo',
        'price' => 4300
    ) ,
    array(
        'name' => '剃须刀',
        'brand' => '飞利浦',
        'price' => 3100
    ) ,
    array(
        'name' => '跑步机',
        'brand' => '三和松石',
        'price' => 4900
    ) ,
    array(
        'name' => '手表',
        'brand' => '卡西欧',
        'price' => 960
    ) ,
    array(
        'name' => '液晶电视',
        'brand' => '索尼',
        'price' => 6299
    ) ,
    array(
        'name' => '激光打印机',
        'brand' => '惠普',
        'price' => 1200
    )
);
$ShoppingList = array_sort($array, 'price');
print_r($ShoppingList);
?>

面是对$array这个二维数组按照'price'从低到高的排序.


文章网址:http://www.phprm.com/shuzu/fs3772.html

随意转载^^但请附上教程地址。

标签:php二维数组排序 数组键值排序

相关文章

发表留言