用php在第3个值中对第2个嵌套数组进行排序

米琪

需要用php对第二个嵌套数组按第n个值进行排序;'开始时间'。思考也许超调是关键。发布嵌套的@week @day @class数组以及usort调用和我一直在尝试的变体函数。

Array
(
  [Sunday] => Array
    (
        [0] => Array
            (
                [Class Name] => Fun Class
                [Instructor] => Fun Teacher
                [Class Type] => Yoga Stretches
                [Start Time] => 1899-12-30T17:00:00
                [End Time] => 1899-12-30T18:15:00
                [Day Name] => Sunday
            )

        [1] => Array
            (
                [Class Name] => Another Fun Class
                [Instructor] => Same Fun Teacher
                [Class Type] => Relaxation
                [Start Time] => 1899-12-30T18:30:00
                [End Time] => 1899-12-30T19:45:00
                [Day Name] => Sunday
            )

        [2] => Array
            (
                [Class Name] => Hot Yoga without Cold
                [Instructor] => Dave the Flexible
                [Class Type] => Hot Hot Yoga
                [Start Time] => 1899-12-30T09:00:00
                [End Time] => 1899-12-30T10:30:00
                [Day Name] => Sunday
            )
    )
    [Monday] => Array
    (
        [0] => Array
            (
                [Class Name] => Mellow Chill Hang
                [Instructor] => Guru Awesome
                [Class Type] => Yoga Namaste
                [Start Time] => 1899-12-30T12:00:00
                [End Time] => 1899-12-30T13:00:00
                [Day Name] => Monday
            )
   )
)

尝试过(变化形式):

foreach ($week_schedule as $day)//$week_schedule = the outer array
    {
     for($j=count($week_schedule);$j>=0;$j--)
         usort($day,'sortTimes');
}

function sortTimes( $a, $b ) {
    return strtotime($a["Start Time"]) - strtotime($b["Start Time"]);
 }

尝试使用单个foreach提取值($ day => $ class)。我敢打赌这不会最终需要很多代码。

y

尝试使用array_map进入嵌套元素,您Start Time拥有一个'T'字符,我认为该字符无法使用,strtotime因此我将其删除:

function custom_map( $array ) {
    usort( $array, function( $a, $b ) {
        return ($a['Start Time']<$b['Start Time'])? -1 : 1;
    });
    return $array;
}

$new_array = array_map( "custom_map", $week_schedule );

var_dump($new_array);

演示版

解释:

由于您有兴趣了解其工作原理,因此我自己做了一些研究,并提出了以下解释:

首先,您应该知道array_map()和usort()的用途。

来自PHP Doc的array_map():

将回调函数应用于每个数组后,array_map()将返回一个包含array1的所有元素的数组。

句法:

array array_map ( callable $callback , array $array1 [, array $... ] )

简单来说,array_map()会将数组的每个元素传递给您指定的回调函数。它返回一个数组(用更改后的值,您在做了回调函数)。

现在usort(),

来自PHP Doc的usort():

该函数将使用用户提供的比较函数按其值对数组进行排序。如果您希望排序的数组需要按照一些非平凡的条件进行排序,则应使用此函数。

句法:

bool usort ( array &$array , callable $value_compare_func )

因此,usort()基本上比较每个数组元素,以便以正确的顺序对其进行排序。您在此处看到的行:

return ($a['Start Time']<$b['Start Time'])? -1 : 1;

基本上翻译为:

 if $a['Start Time'] is lesser than $b['Start Time'], then return -1 so
 that $a can come before $b

带有值:

$a['Start Time'] = '1899-12-30T09:00:00'; //3rd element
$b['Start Time'] = '1899-12-30T17:00:00'; //1st element

现在很明显,作为第三个元素的$ a小于第一个元素$ b,因此$ a会位于第一个元素之前。usort()从头到尾检查每个组合以进行排序。

现在,回到array_map(),我们使用它的原因是因为您有嵌套的数组。

array_map()的实际作用是将所有@days传递给usort。然后usort接受所有@class并进行相应的排序。如果您看到下面的演示,其中您的@weeks仅被删除了@days和@class出现,则上面的代码将不起作用,并且会因为找不到您要遍历2的错误而引发“找不到开始时间”的错误仅存在1个时的嵌套数组:

演示版

对于上述结构,正确的方法将是直接实现usort,而无需使用array_map,例如:

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按第 4 个值对 2 维数组进行排序?

来自分类Dev

如何使用PHP在JSON数组中打印第1,第3,第5个元素

来自分类Dev

展平Java中第n个嵌套数组的迭代解决方案

来自分类Dev

Gsub函数用第3个参数而不是第2个参数替换值

来自分类Dev

用两个不同的值对嵌套的php数组进行排序

来自分类Dev

PHP按第3层的子数组值对数组进行排序,但带有索引

来自分类Dev

如何从Android中的数组排序中跳过第0个位置值?

来自分类Dev

按升序组合2个int文件,进行比较,然后将它们排序为第3个文件,而无需在c中使用数组

来自分类Dev

第2个,第3个,第5个乘积的第1000个元素

来自分类Dev

将2个动态长度的数组添加到第3个数组中

来自分类Dev

将2个动态长度的数组添加到第3个数组中

来自分类Dev

我有一个文本文件,其中3列用分隔:如何按第2列的最后2位对第二列进行排序?

来自分类Dev

如何使用Flask设置列表中每个第1,第2,第3个帖子的颜色?

来自分类Dev

将2个文本框值相乘并显示在第3个文本框中

来自分类Dev

代码从2个表中获取数据并在php中输入第3个表

来自分类Dev

按日期对php中的3个多维数组进行排序

来自分类Dev

使用numpy数组在列表中输出第n个值

来自分类Dev

合并两个三列矩阵:第 1 列和第 2 列中的唯一值,第 3 列中的最大值

来自分类Dev

PHP的替换和2个嵌套数组的相交

来自分类Dev

如何在PHP中访问数组的第N个元素

来自分类Dev

提取数组中的每个第3个数据

来自分类Dev

C-第3个scanf修改了第2个scanf中的变量

来自分类Dev

用猫鼬对嵌套数组进行排序

来自分类Dev

在所有组中的第 3 级对 python 2.7 中的嵌套字典进行排序

来自分类Dev

根据 1 个表中第 1 列和第 2 列之间的匹配进行分组

来自分类Dev

SQLQuery-跨单个表中的第3个值分组的2个值范围内的值的计数

来自分类Dev

如何选择数据集的第 1 个、第 2 个和第 3 个?

来自分类Dev

MySQL PhP从第1列复制并插入第2列,但保留两个值

来自分类Dev

算法访谈:n个排序数组中的第m个频繁元素

Related 相关文章

  1. 1

    如何按第 4 个值对 2 维数组进行排序?

  2. 2

    如何使用PHP在JSON数组中打印第1,第3,第5个元素

  3. 3

    展平Java中第n个嵌套数组的迭代解决方案

  4. 4

    Gsub函数用第3个参数而不是第2个参数替换值

  5. 5

    用两个不同的值对嵌套的php数组进行排序

  6. 6

    PHP按第3层的子数组值对数组进行排序,但带有索引

  7. 7

    如何从Android中的数组排序中跳过第0个位置值?

  8. 8

    按升序组合2个int文件,进行比较,然后将它们排序为第3个文件,而无需在c中使用数组

  9. 9

    第2个,第3个,第5个乘积的第1000个元素

  10. 10

    将2个动态长度的数组添加到第3个数组中

  11. 11

    将2个动态长度的数组添加到第3个数组中

  12. 12

    我有一个文本文件,其中3列用分隔:如何按第2列的最后2位对第二列进行排序?

  13. 13

    如何使用Flask设置列表中每个第1,第2,第3个帖子的颜色?

  14. 14

    将2个文本框值相乘并显示在第3个文本框中

  15. 15

    代码从2个表中获取数据并在php中输入第3个表

  16. 16

    按日期对php中的3个多维数组进行排序

  17. 17

    使用numpy数组在列表中输出第n个值

  18. 18

    合并两个三列矩阵:第 1 列和第 2 列中的唯一值,第 3 列中的最大值

  19. 19

    PHP的替换和2个嵌套数组的相交

  20. 20

    如何在PHP中访问数组的第N个元素

  21. 21

    提取数组中的每个第3个数据

  22. 22

    C-第3个scanf修改了第2个scanf中的变量

  23. 23

    用猫鼬对嵌套数组进行排序

  24. 24

    在所有组中的第 3 级对 python 2.7 中的嵌套字典进行排序

  25. 25

    根据 1 个表中第 1 列和第 2 列之间的匹配进行分组

  26. 26

    SQLQuery-跨单个表中的第3个值分组的2个值范围内的值的计数

  27. 27

    如何选择数据集的第 1 个、第 2 个和第 3 个?

  28. 28

    MySQL PhP从第1列复制并插入第2列,但保留两个值

  29. 29

    算法访谈:n个排序数组中的第m个频繁元素

热门标签

归档