当前位置: 首页 > 面试题库 >

如何按值对多维数组进行排序?

田文景
2023-03-14
问题内容

如何按“订单”键的值对该数组排序?即使这些值当前是连续的,也不会总是如此。

Array
(
    [0] => Array
        (
            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4
            [title] => Flower
            [order] => 3
        )

    [1] => Array
        (
            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594
            [title] => Free
            [order] => 2
        )

    [2] => Array
        (
            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b
            [title] => Ready
            [order] => 1
        )
)

问题答案:

尝试使用usort,如果您仍然使用PHP5.2或更早版本,则必须首先定义一个排序函数:

function sortByOrder($a, $b) {
    return $a['order'] - $b['order'];
}

usort($myArray, 'sortByOrder');

从PHP 5.3开始,您可以使用匿名函数:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

最后,在PHP 7中,您可以使用spaceship运算符:

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

要将其扩展到多维排序,如果第二个/第三个排序元素为零,请参考第二个/第三个排序元素-下文将详细说明。您也可以使用它对子元素进行排序。

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

如果需要保留键关联,请使用uasort()-请参见手册中数组排序功能的比较



 类似资料:
  • 问题内容: 请原谅我这是多余的还是超基本的。我要从R进入Python / Numpy,并且很难在脑海里翻转事物。 我有一个维数组,我想使用索引值的另一个n维数组进行排序。我知道我可以将其包装成一个循环,但是似乎应该有一种非常简洁的Numpyonic方式将其击败并提交。这是设置n = 2的问题的示例代码: 所以现在我有一个2 x 5的随机数数组和2 x 5的索引。我已经阅读了约10次帮助,但显然我的

  • 本文向大家介绍按PHP中的子值对php多维数组进行排序,包括了按PHP中的子值对php多维数组进行排序的使用技巧和注意事项,需要的朋友参考一下 'usort'函数可用于对PHP中的多维数组进行排序。它根据用户定义的条件对数组进行排序- 示例 输出结果 这将产生以下输出- 声明一个包含4个元素的数组,并将此数组传递给usort函数,并在元素上调用用户定义的“ my_sort”函数以确保排序以升序进行

  • 问题内容: 有没有一种方法可以使用sort()方法或任何其他方法按列对列表进行排序?可以说我有清单: 我想对其进行排序,使其看起来像这样: 这样做的最佳方法是什么? 编辑: 现在,我遇到索引超出范围错误。我有一个二维数组,可以说1000行b 3列。我想根据第三列对其进行排序。这是正确的代码吗? 问题答案: 是。该内置接受的说法: 请注意,将返回一个新列表。如果要就地排序,请使用列表的方法(也可以方

  • 问题内容: 我有这个数组 现在,我想按此方法对数组进行排序 ? 目前,我在一个foreach循环中对此进行排序 必须有更好的方法 编辑 我希望输出类似 谢谢 问题答案: 您可以使用usort函数。

  • 问题内容: 我有一个多维数组,正在尝试根据特定列中的值将它们分组。 我正在尝试按分组,但实际上我不会事先知道该等级。因此,并不是像我可以将其放在循环中然后说那样,因为我不知道这是级别键的最大值,并且坦率地说,即使我我不确定这也不是我需要这样做的方式。做了… 我希望产生的是: 问题答案: 你需要将它们按 级别 第一 使用 foreach 循环进入数组,检查级别是否与上一个项目相同,然后将其与该数组分

  • 考虑以下数组: 我如何对这个数组进行排序,其中最高值(5)是第一个,然后是2然后是最低值(1)是最后一个?我用了这个: 但我明白了: 它改变了键,但这是错误的。我希望得到这个: 我搜索发现:按数值排序一个数组,但这没有帮助。