`

PHP中二维数组的排序方法

    博客分类:
  • PHP
阅读更多

<?php
/**
* @package     BugFree
* @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author                      Chunsheng Wang <wwccss@263.net>
* @param  array   $ArrayData   the array to sort.
* @param  string  $KeyName1    the first item to sort by.
* @param  string  $SortOrder1  the order to sort by("SORT_ASC"|"SORT_DESC")
* @param  string  $SortType1   the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array                sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
    if(!is_array($ArrayData))
    {
        return $ArrayData;
    }
 
    // Get args number.
    $ArgCount = func_num_args();
 
    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I < $ArgCount;$I ++)
    {
        $Arg = func_get_arg($I);
        if(!eregi("SORT",$Arg))
        {
            $KeyNameList[] = $Arg;
            $SortRule[]    = '$'.$Arg;
        }
        else
        {
            $SortRule[]    = $Arg;
        }
    }
 
    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
        foreach($KeyNameList AS $KeyName)
        {
            ${$KeyName}[$Key] = $Info[$KeyName];
        }
    }
 
    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
}
 
 
//################# 示例 #################
$arr = array(
    array(
        'name'        =>    '学习',
        'size'        =>    '1235',
        'type'        =>    'jpe',
        'time'        =>    '1921-11-13',
        'class'        =>    'dd',
    ),
    array(
        'name'        =>    '中国功夫',
        'size'        =>    '153',
        'type'        =>    'jpe',
        'time'        =>    '2005-11-13',
        'class'        =>    'jj',
    ),
    array(
        'name'        =>    '编程',
        'size'        =>    '35',
        'type'        =>    'gif',
        'time'        =>    '1997-11-13',
        'class'        =>    'dd',
    ),
    array(
        'name'        =>    '中国功夫',
        'size'        =>    '65',
        'type'        =>    'jpe',
        'time'        =>    '1925-02-13',
        'class'        =>    'yy',
    ),
    array(
        'name'        =>    '中国功夫',
        'size'        =>    '5',
        'type'        =>    'icon',
        'time'        =>    '1967-12-13',
        'class'        =>    'rr',
    ),
);
 
print_r($arr);
 
//注意:按照数字方式排序时 153 比 65 小
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");
 
print_r($temp);
 
?>

 

其他相关排序函数:

 

sort ( array &$array [, int $sort_flags] )

该函数会对目标数组进行排序,各元素按值由低到高的顺序排列.注意,该函数参数是按引用传递的, 它并不是返回排序后的数组.相反,它只是对当前数组排序,不论结果如何都不返回任何值.
注意: 本函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序.

$arr = array(9,5,2,6,8,4,3,1); sort($arr); print_r($arr); ?>

输出:(可以看到键值关联不再保持)

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 8 [7] => 9 )

asort ( array &$array [, int $sort_flags] )

本函数对数组进行排序,数组的索引保持和单元的关联.主要用于对那些单元顺序很重要的结合数组进行排序. 同样是按引用传递的,没返回值.

<?php $arr = array(5,2,6,8,4,1); asort($arr); print_r($arr); ?>

输出(可以看到键值保持不变):

Array ( [5] => 1 [1] => 2 [4] => 4 [0] => 5 [2] => 6 [3] => 8 )

rsort ( array &$array [, int $sort_flags] )

本函数类似sort函数, 对数组进行逆向排序(最高到最低)。

注: 本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。

如果成功则返回 TRUE,失败则返回 FALSE

arsort ( array &$array [, int $sort_flags] )

本函数对数组进行逆向排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。arsort()函数与asort()相同,只是它以相反的顺序(降序)对数组元素排序。

如果成功则返回 TRUE,失败则返回 FALSE

ksort ( array &$array [, int $sort_flags] )

ksort和sort的区别就是对数组按照键名排序而不是按值排序,保留键名到数据的关联.本函数主要用于关联数组. 如果成功则返回 TRUE,失败则返回 FALSE。

krsort ( array &$array [, int $sort_flags] )
见ksort,该函数同ksort只是把ksort后的结果逆序排序而已。

natsort ( array &$array )

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”.本算法和通常的计算机字符串排序算法(用于 sort())的区别见下面示例.

如果成功则返回 TRUE,失败则返回 FALSE.
php手册中有个非常经典的例子

<?php $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); sort($array1); echo "Standard sorting\n"; print_r($array1); natsort($array2); echo "\nNatural order sorting\n"; print_r($array2); ?>

上例将输出:Standard sorting

Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png )

Natural order sorting

Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

还有些数组排序函数以u(user)开头的, 都是些用户自定义排序函数。时间原因这就不多写了。

分享到:
评论

相关推荐

    php中二维数组排序问题方法详解

    一维数组排序可以使用asort、ksort等一些方法进程排序,相对来说比较简单。二维数组的排序怎么实现呢?使用array_multisort和usort可以实现,下面跟着小编来学习php中二维数组排序问题方法详解

    使用php对二维数组按数组值进行排序

    本文将深入探讨如何在PHP中对二维数组按数组值进行排序,并提供一个实际的代码示例。 二维数组,顾名思义,是数组中的数组,可以理解为表格形式的数据结构,每一行是一个一维数组,所有行数组组成一个二维数组。...

    php 二维数组按数组键值进行排序

    php对二维数组按数组键值进行排序 @param array $array 要排序的数组 @param string $key 排序依据字段 @param string $order 排序方式,0为降序,1为升序

    用php递归将二维数组转换成一维数组

    在PHP编程中,处理数组是常见的任务之一...这个方法可以应用于任意深度的多维数组,使其转换为一维数组,方便后续处理和操作。在处理复杂数据结构时,掌握递归思想是至关重要的,它可以帮助我们有效地解决类似的问题。

    php处理二维数组(去除重复项,排序,转换,去空白等)

    根据给定文件的信息,本文将深入探讨PHP处理二维数组的各种方法,包括去除重复项、排序、转换以及去除空白等操作。 ### 一、去除二维数组中的重复项 在PHP中,处理二维数组的一个常见需求是去除其中的重复项。一个...

    PHP 多维数组的排序问题 根据二维数组中某个项排序

    array_multisort会根据这些参数重新排序数组的值。 在多维数组排序的上下文中,array_multisort可以用来根据二维数组中的某个子数组的特定字段进行排序。例如,假设我们有一个二维数组,每个子数组包含地区信息以及...

    json_ksort 二维数组键值排序源码

    标题中的"json_ksort 二维数组键值排序源码"指的是一种自定义的方法,可能是为了对包含JSON数据的二维数组进行键值排序而编写的一段代码。这种方法可能通过递归或者其他策略来处理嵌套的键值对,确保整个结构被正确...

    php二维数组排序

    ### PHP 二维数组排序知识点详解 #### 一、概述 在 PHP 编程中,处理数据经常需要对数组进行排序,尤其是对二维数组的排序。本文档介绍了一种使用 `array_multisort()` 函数来实现多维数组排序的方法,并通过一个...

    PHP实现一维数组的组合算法

    PHP实现一维数组的组合算法,欢迎下载和评论。

    php一维二维数组键排序方法实例总结

    本文实例总结了php一维二维数组键排序方法。分享给大家供大家参考。具体方法如下: 在php中数组排序一直是一个老生常谈的问题,下面我们来集中讲一下关于在php中一维数组与二维数组排序的实现程序,相信对大家有一定...

    PHP实现一维数组转二维数组的方法

    二、一维数组转二维数组的方法 要将一维数组转换为二维数组,我们需要遍历一维数组,然后将每个元素插入到新的二维数组中作为一个新数组。以下是一个简单的实现方法: ```php &lt;?php // 原始一维数组 $asr[1] = ...

    从互联网上收集的用于采访的常用PHP算法 冒泡、快速排序、二进制排序、二维数组去重、二维数组排序-php-suanfa.zip

    c语言从互联网上收集的用于采访的常用PHP算法。冒泡、快速排序、二进制排序、二维数组去重、二维数组排序_php-suanfa.zip

    二维数组表单提交

    在IT领域,尤其是在Web开发中,二维数组常常用于存储复杂的数据结构,比如表格数据或层级关系数据。在本例中,我们关注的是如何利用JQuery处理一个变长的二维数组,以便于提交多个相关联的数据。这样的场景常见于...

    二维数组去除重复项

    ### PHP中的二维数组去重方法 给定的代码片段展示了如何在PHP中定义一个函数`unique_arr`,用于去除二维数组中的重复项。这个函数接受三个参数: 1. `$array2D`:待处理的二维数组。 2. `$stkeep`(布尔值):如果...

    php二维数组排序方法(array_multisort usort)

    总结来说,array_multisort()和usort()都是对PHP中二维数组进行排序的有效方法。array_multisort()适用于需要根据其他数组的排序结果来重新排列原数组元素的场景,而usort()则提供了更多的灵活性,允许我们在回调...

    php 笛卡尔积二维数组矩阵算法

    php 笛卡尔积二维数组矩阵算法 生成多个组合 php 笛卡尔积二维数组矩阵算法 生成多个组合 php 笛卡尔积二维数组矩阵算法 生成多个组合 php 笛卡尔积二维数组矩阵算法 生成多个组合 php 笛卡尔积二维数组矩阵...

    PHP按指定键值对二维数组进行排序的方法

    本篇文章将详细讲解如何使用PHP的`array_multisort()`函数来对二维数组按照指定键值进行排序,并结合实例进行解析。 首先,让我们理解一下`array_multisort()`函数的作用。`array_multisort()`是PHP内建的一个函数...

    js sort 二维数组排序的用法小结

    在php中是有multi_sort函数可供调用的,但是在js中似乎没有这种函数,但是没关系 ,因为js的sort函数其实也提供了参数可以定义比较函数进行二维数组的排序。 1、按数值排序假设有如下数组 代码如下:var arr

Global site tag (gtag.js) - Google Analytics