`
moqiang02
  • 浏览: 556361 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
一维数组排序可以使用asort、ksort等一些方法进程排序,相对来说比较简单。二维数组的排序怎么实现呢?使用array_multisort和usort可以实现

例如像下面的数组:

$users = array(
    array('name' => 'tom', 'age' => 20),
    array('name' => 'anny', 'age' => 18),
    array('name' => 'jack', 'age' => 22),
);

希望能按照age从小到大进行排序。笔者整理了两个方法出来,分享给大家。

1、使用array_multisort

使用这个方法,会比较麻烦些,要将age提取出来存储到一维数组里,然后按照age升序排列。具体代码如下:

$ages = array();
foreach ($users as $user) {
    $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);

执行后,$users就是排序好的数组了,可以打印出来看看。如果需要先按年龄升序排列,再按照名称升序排列,方法同上,就是多提取一个名称数组出来,最后的排序方法这样调用:

array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

2、使用usort

使用这个方法最大的好处就是可以自定义一些比较复杂的排序方法。例如按照名称的长度降序排列:

usort($users, function($a, $b) {
    $al = strlen($a['name']);
    $bl = strlen($b['name']);
    if ($al == $bl)
        return 0;
    return ($al > $bl) ? -1 : 1;
});

这里使用了匿名函数,如果有需要也可以单独提取出来。其中$a, $b可以理解为$users数组下的元素,可以直接索引name值,并计算长度,而后比较长度就可以了。

笔者更喜欢第二种方法,因为少了提取排序内容到一维数组的步骤,而且排序方法更为灵活。

注:

return ($al > $bl) ? -1 : 1;
这里这个返回值是用来判断是否排序成功的
若返回值为负,则表示 A 在排序后的序列中出现在 B 之前。
若返回值为 0,则表示 A 和 B 具有相同的排序顺序。
若返回值为正,则表示 A 在排序后的序列中出现在 B 之后。


分享到:
评论

相关推荐

    PHP二维数组排序的3种方法和自定义函数分享

    本文将介绍如何使用PHP对...无论是使用内置的`array_multisort`,还是自定义排序函数,或者结合其他一维数组排序函数,都能有效地对二维数组进行排序。理解并熟练掌握这些方法,将有助于提高PHP编程中的数据处理效率。

    php对二维数组进行排序的简单实例

    本文将深入探讨如何使用`array_multisort`函数对二维数组进行排序,同时提供一个简单的实例来帮助理解这一过程。 `array_multisort`是PHP提供的一个强大功能,它允许你对多维数组的元素进行排序。这个函数的特别之...

    php二维数组排序详解

    本文将深入探讨如何使用 `array_multisort()` 以及自定义方法对二维数组进行排序。 首先,`array_multisort()` 函数是 PHP 中用于多维数组排序的关键工具。它允许你基于一个或多个数组的值对数组进行排序。在上述...

    多维数组让数组根据某个字段的大小排序

    - **`array_multisort` 的使用**: 此函数不仅可以排序数组,还可以保持数组之间的关联性,非常适合处理多维数组排序问题。 2. **性能优化**: - **减少内存消耗**: 如果 `$arr` 数组非常大,可以考虑直接在 `...

    php二维数组排序与默认自然排序的方法介绍

    除了`array_multisort()`之外,还有其他排序函数可以处理二维数组,如`usort()`,这是一个用户自定义的排序函数,允许你提供一个比较函数来决定元素的顺序。这个比较函数接收两个参数,如果第一个参数应该出现在第二...

    php代码-简单二维数组排序示例

    然后,`array_multisort()`函数接收这个一维数组以及原始二维数组,根据$scores的值进行排序,`SORT_DESC`参数表示降序排列。 如果需要对数组进行更复杂的排序,比如先按年龄升序排序,再按分数降序排序,可以传递...

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

    除了`array_multisort`函数,还有其他方法可以实现二维数组的排序,如使用内置的`usort`或`uasort`函数进行自定义排序。这些函数接受用户定义的比较函数,可以根据特定逻辑进行排序。 例如,使用`uasort`函数对`...

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

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

    一个PHP二维数组排序的函数分享

    在实际应用中,除了UncleToo分享的这个函数,还有其他多种方法可以对PHP二维数组进行排序,比如`array_multisort()`、`usort()`等。`array_multisort()`允许您一次性对多个键进行排序,而`usort()`则可以使用自定义...

    php根据某字段对多维数组进行排序的方法

    当需要根据某个字段值来排序多维数组时,我们可以先根据该字段值构造一个一维数组,然后使用array_multisort()将这个一维数组和原始的多维数组关联起来,按照这个一维数组的顺序来重新排序多维数组。 根据文件中...

    php简单实现多维数组排序的方法

    例如,给定一个二维数组,我们可以根据其中一个键(如'one')的值对整个数组进行升序或降序排序。 以下是一个使用`array_multisort()`的例子: ```php $data = array( 0 => array('one' => 34, 'two' => 'd'), 1...

    PHP 二维数组根据某个字段排序的具体实现

    当处理多维数组时,通过此函数可以根据数组的一个字段重新排序数组。 5. 排序方向:在排序时,可以选择升序(SORT_ASC)或降序(SORT_DESC)。这在进行排序时非常关键,因为不同的方向会影响排序的结果。 6. 数据来源...

    PHP数组详解.pdf

    - `array_multisort()`多维数组排序。 5. 拆分、合并及分解函数: - `array_slice()`提取数组的一部分。 - `array_splice()`插入/删除数组的部分。 - `array_combine()`使用一个数组的值作为键,另一个数组的值...

    php 二维数组时间排序实现代码

    5. **构建新的排序数组**:再次使用`foreach`循环,将排序后的`$keysvalue`的索引与原始数组`$arr`对应元素合并到`$new_array`中。这样,我们就得到了一个新的数组,其中元素的位置反映了`$keys`键值的排序。 6. **...

    PHP实现对二维数组某个键排序的方法

    除了`list_sort_by()`函数提供的方法,PHP还提供了多种对数组进行排序的内置函数,例如`array_multisort()`,它可以对多维数组进行复杂的排序。对于自定义排序逻辑,还可以使用`usort()`,它允许你传递一个比较函数...

    php实现多维数组排序的方法示例

    2. 使用`array_multisort()`函数:这个函数用于对一维或二维数组进行排序,可以同时对多个数组进行排序。在多维数组的情况下,`array_multisort()`通常配合`array_map()`或`array_column()`使用,先提取出需要排序的...

Global site tag (gtag.js) - Google Analytics