首页 > php代码 > php对多维数组的某个键值排序方法

php对多维数组的某个键值排序方法

确定了很多多维数组排序的函数与例子,但一直对于指定键值进行排序处理不好,今天就网上网罗了一大堆方法,下面整理一下防止以后使用,同时也希望对各位朋友会有所帮助。

php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引

排序顺序标志:

SORT_ASC - 按照上升顺序排序

SORT_DESC - 按照下降顺序排序

排序类型标志:

SORT_REGULAR - 将项目按照通常方法比较

SORT_NUMERIC - 将项目按照数值比较

SORT_STRING - 将项目按照字符串比较

例子 1. 对多个数组排序

<?php
$ar1 = array(
    "10",
    100,
    100,
    "a"
);
$ar2 = array(
    1,
    3,
    "2",
    1
);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>

本例中经过排序后,第一个数组将包含 "10","a",100,100。第二个数组将包含 1,1,"2",3。第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致。


但是这些都不可以指定由那个键值进行排名了,下面我就整理了几个函数算法都不错。

示例代码

<?php
/**
 * 对多位数组进行排序
 * @param $multi_array 数组
 * @param $sort_key需要传入的键名
 * @param $sort排序类型
 */
function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
    if (is_array($multi_array)) {
        foreach ($multi_array as $row_array) {
            if (is_array($row_array)) {
                $key_array[] = $row_array[$sort_key];
            } else {
                return FALSE;
            }
        }
    } else {
        return FALSE;
    }
    array_multisort($key_array, $sort, $multi_array);
    return $multi_array;
}
?>

例子二

<?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[] = $arr[$k];
    }
    return $new_array;
}
?>

例子3

<?php
/*
function:二维数组按指定的键值排序
author:www.phprm.com
*/
function array_sort($array, $keys, $type = 'asc') {
    if (!isset($array) || !is_array($array) || empty($array)) {
        return '';
    }
    if (!isset($keys) || trim($keys) == '') {
        return '';
    }
    if (!isset($type) || $type == '' || !in_array(strtolower($type) , array(
        'asc',
        'desc'
    ))) {
        return '';
    }
    $keysvalue = array();
    foreach ($array as $key => $val) {
        $val[$keys] = str_replace('-', '', $val[$keys]);
        $val[$keys] = str_replace(' ', '', $val[$keys]);
        $val[$keys] = str_replace(':', '', $val[$keys]);
        $keysvalue[] = $val[$keys];
    }
    asort($keysvalue); //key值排序
    reset($keysvalue); //指针重新指向数组第一个
    foreach ($keysvalue as $key => $vals) {
        $keysort[] = $key;
    }
    $keysvalue = array();
    $count = count($keysort);
    if (strtolower($type) != 'asc') {
        for ($i = $count - 1; $i >= 0; $i--) {
            $keysvalue[] = $array[$keysort[$i]];
        }
    } else {
        for ($i = 0; $i < $count; $i++) {
            $keysvalue[] = $array[$keysort[$i]];
        }
    }
    return $keysvalue;
}
?>

例如有下列这样一个数组:

$array=array(

0=>array('id'=>8,'username'=>'phpernote'),

1=>array('id'=>9,'username'=>'com'),

2=>array('id'=>5,'username'=>'www')

);

现在需要将这个二维数组按id升序排列,则:

array_sort($array,'id','asc');


本文地址:http://www.phprm.com/code/63726.html

转载随意,但请附上文章地址:-)

标签:foreach

相关文章

发表留言