首页 php教程 php手册 php 二维数组排序几种方法

php 二维数组排序几种方法

May 25, 2016 pm 04:54 PM
foreach

二维数组排序排序在php中也提供了一个函数array_multisort就可以直接排序了,下面我来介绍除了全使用array_multisort 对数组进行排序我们还写了一些自定二维数组排序方法。

有时候为了达到一定目的,需要对二维数组进行排序,现分享一下其实现的方法。

<?php
$arr = array(
    &#39;1&#39; => array(
        &#39;date&#39; => &#39;2011-08-18&#39;,
        &#39;num&#39; => 5
    ) ,
    &#39;2&#39; => array(
        &#39;date&#39; => &#39;2011-08-20&#39;,
        &#39;num&#39; => 3
    ) ,
    &#39;3&#39; => array(
        &#39;date&#39; => &#39;2011-08-17&#39;,
        &#39;num&#39; => 10
    )
);
$result = sysSortArray($arr, &#39;num&#39;); //这样运行之后的效果为:
$arr = array(
    &#39;1&#39; => array(
        &#39;date&#39; => &#39;2011-08-18&#39;,
        &#39;num&#39; => 3
    ) ,
    &#39;2&#39; => array(
        &#39;date&#39; => &#39;2011-08-20&#39;,
        &#39;num&#39; => 5
    ) ,
    &#39;3&#39; => array(
        &#39;date&#39; => &#39;2011-08-17&#39;,
        &#39;num&#39; => 10
    )
);
//用到的函数:
/**
 * @package     二维数组排序
 * @version     $Id: FunctionsMain.inc.php,v 1.32 2011/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";&hellip;&hellip;)
 * @author                      lamp100
 * @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[] = &#39;$&#39; . $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 = &#39;array_multisort(&#39; . join(",", $SortRule) . &#39;,$ArrayData);&#39;;
    eval($EvalString);
    return $ArrayData;
}
?>
登录后复制

另外:array_multisort 函数功能也很强大,详细可以参看PHP手册,里面讲的很详细。


我们可以使用array_multisort()这个函数。array_multisort() 函数对多个数组或多维数组进行排序。

参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:

•SORT_ASC - 默认,按升序排列。(A-Z)

•SORT_DESC - 按降序排列。(Z-A)

随后可以指定排序的类型:

•SORT_REGULAR - 默认。将每一项按常规顺序排列。

•SORT_NUMERIC - 将每一项按数字顺序排列。

•SORT_STRING - 将每一项按字母顺序排列。

语法:array_multisort(array1,sorting order,sorting type,array2,array3...)

•array1:必需。规定输入的数组。

•sorting order:可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。

•sorting type:可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。

•array2:可选。规定输入的数组。

•array3:可选。规定输入的数组。

字符串键名将被保留,但是数字键将被重新索引,从 0 开始,并以 1 递增。可以在每个数组后设置排序顺序和排序类型。如果没有设置,每个数组参数会使用默认值。

下面是一个例子:

<?php
$arr = &#39;&#39;;
echo &#39;二维数组如下:&#39; . &#39;<br / >&#39;;
for ($i = 0; $i <= 5; $i++) {
    $arr[$i][&#39;val&#39;] = mt_rand(1, 100);
    $arr[$i][&#39;num&#39;] = mt_rand(1, 100);
}
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r($arr);
echo &#39;
登录后复制
'; echo '从二维数组中抽出键为val,单独成另一个数组:' . '
'; foreach ($arr as $key => $row) { $vals[$key] = $row['val']; $nums[$key] = $row['num']; } echo '
&#39;;
print_r($vals);
echo &#39;
登录后复制
登录后复制
'; echo '对其进行排序:' . '
'; array_multisort($vals, SORT_ASC, $arr); echo '
&#39;;
print_r($vals);
echo &#39;
登录后复制
登录后复制
'; ?>

运行结果:

二维数组如下:
Array
(
    [0] => Array
        (
            [val] => 46
            [num] => 49
        )
    [1] => Array
        (
            [val] => 8
            [num] => 24
        )
    [2] => Array
        (
            [val] => 37
            [num] => 3
        )
    [3] => Array
        (
            [val] => 32
            [num] => 35
        )
    [4] => Array
        (
            [val] => 19
            [num] => 38
        )
    [5] => Array
        (
            [val] => 30
            [num] => 37
        )
)
从二维数组中抽出键为val,单独成另一个数组:
Array
(
    [0] => 46
    [1] => 8
    [2] => 37
    [3] => 32
    [4] => 19
    [5] => 30
)
对其进行排序:
Array
(
    [0] => 8
    [1] => 19
    [2] => 30
    [3] => 32
    [4] => 37
    [5] => 46
)
登录后复制

我们将得到一个按val升序排序的二维数组。


教程地址:

欢迎转载!但请带上文章地址^^

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么? Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么? Apr 27, 2023 pm 03:40 PM

一、Iterator和foreach的区别多态差别(foreach底层就是Iterator)Iterator是一个接口类型,他不关心集合或者数组的类型;for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;1.为啥说foreach底层就是Iterator编写的代码:反编译代码:二、foreach与iterator时remove的区别先来看阿里java开发手册但1的时候不会报错,2的时候就会报错(java.util.ConcurrentModificationException)首

php如何判断foreach循环到第几个 php如何判断foreach循环到第几个 Jul 10, 2023 pm 02:18 PM

​php判断foreach循环到第几个的步骤:1、创建一个“$fruits”的数组;2、创建一个计数器变量“$counter”初始值为0;3、使用“foreach”循环遍历数组,并在循环体中增加计数器变量的值,再输出每个元素和它们的索引;4、在“foreach”循环体外输出计数器变量的值,以确认循环到了第几个元素。

PHP返回一个键值翻转后的数组 PHP返回一个键值翻转后的数组 Mar 21, 2024 pm 02:10 PM

这篇文章将为大家详细讲解有关PHP返回一个键值翻转后的数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP键值翻转数组键值翻转是一种对数组进行的操作,它将数组中的键和值进行交换,生成一个新的数组,其中原始键作为值,原始值作为键。实现方法在php中,可以通过以下方法对数组进行键值翻转:array_flip()函数:array_flip()函数专门用于键值翻转操作。它接收一个数组作为参数,并返回一个新的数组,其中键和值已交换。$original_array=[

foreach和for循环的区别是什么 foreach和for循环的区别是什么 Jan 05, 2023 pm 04:26 PM

区别:1、for通过索引来循环遍历每一个数据元素,而forEach通过JS底层程序来循环遍历数组的数据元素;2、for可以通过break关键词来终止循环的执行,而forEach不可以;3、for可以通过控制循环变量的数值来控制循环的执行,而forEach不行;4、for在循环外可以调用循环变量,而forEach在循环外不能调用循环变量;5、for的执行效率要高于forEach。

PHP返回数组中的当前元素 PHP返回数组中的当前元素 Mar 21, 2024 pm 12:36 PM

这篇文章将为大家详细讲解有关PHP返回数组中的当前元素,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。获取PHP数组中的当前元素php为访问和操作数组提供了多种方法,其中包括获取数组中的当前元素。以下介绍几种常用的技术:1.current()函数current()函数返回数组内部指针当前指向的元素。指针最初指向数组的第一个元素。使用以下语法:$currentElement=current($array);2.key()函数key()函数返回数组内部指针当前指向元

如何使用forEach函数遍历对象的属性? 如何使用forEach函数遍历对象的属性? Nov 18, 2023 pm 06:10 PM

如何使用forEach函数遍历对象的属性?在JavaScript中,我们经常需要对对象的属性进行遍历操作。如果你想使用一种简洁的方法来遍历对象的属性,forEach函数是一个非常好的选择。在本文中,我们将介绍如何使用forEach函数来遍历对象的属性,并提供具体的代码示例。首先,让我们来了解一下forEach函数的基本用法。forEach函数是Java

Java Map 的高级技巧:掌握你可能不知道的冷知识,提升你的编程能力 Java Map 的高级技巧:掌握你可能不知道的冷知识,提升你的编程能力 Feb 19, 2024 pm 12:33 PM

Map接口概述Map接口是Java集合框架中用于存储键值对的数据结构。它允许您使用键来查找和检索关联的值。Map接口提供了许多有用的方法,包括put()、get()、remove()、containsKey()、containsValue()、size()、isEmpty()等。Map的实现Java中最常用的Map实现是HashMap和TreeMap。HashMap是一个基于哈希表的Map实现,它通过计算键的哈希值来快速查找和检索值。TreeMap是一个基于红黑树的Map实现,它以升序或降序对键

php foreach循环中怎么获取当前元素的索引值 php foreach循环中怎么获取当前元素的索引值 Mar 23, 2023 am 09:17 AM

在PHP中,foreach语句被广泛用于对数组和对象进行遍历。在进行循环的过程中,我们有时需要获取当前循环到第几个元素。本文将为大家介绍怎样在PHP foreach循环中获取当前元素的索引值。

See all articles