PHP多维数组按值排序

安德烈·卡斯特罗(AndréCastro)

关于此多维数组:

[
(int) 7 => [
    (int) 0 => [
        (int) 0 => '12:45',
        (int) 1 => 'E1',
        (int) 2 => 'B EXTREME 30'
    ],
    (int) 1 => [
        (int) 0 => '10:15',
        (int) 1 => 'E1',
        (int) 2 => 'B SHAPE 30'
    ],
],
(int) 1 => [
    (int) 0 => [
        (int) 0 => '09:30',
        (int) 1 => 'E2',
        (int) 2 => 'CYCLING VIRTUAL 50'
    ],
    (int) 1 => [
        (int) 0 => '10:30',
        (int) 1 => 'E1',
        (int) 2 => 'BODY PUMP VIRTUAL 60'
    ],
    (int) 2 => [
        (int) 0 => '11:45',
        (int) 1 => 'E1',
        (int) 2 => 'BODY BALANCE VIRTUAL 60'
    ],
],
(int) 2 => [
    (int) 0 => [
        (int) 0 => '14:45',
        (int) 1 => 'E2',
        (int) 2 => 'CYCLING VIRTUAL 50'
    ],
    (int) 1 => [
        (int) 0 => '17:00',
        (int) 1 => 'E1',
        (int) 2 => 'POSTURA ALONGAMENTO 60'
    ],
    (int) 2 => [
        (int) 0 => '09:15',
        (int) 1 => 'E1',
        (int) 2 => 'BODY PUMP 50'
    ],
]
]

每个第一级数组的第一个键是星期几(第7天,第1天和第2天)。

每个第一级数组中的数组包含小时(09:45),房间(E1)和说明(B EXTREME 30)。

我试图按第二级数组小时值对该多维数组进行排序。我用usort()ksort()array_multisort(),并为数组排序,因为我需要没有运气一些定制功能。

内部数组必须按升序排序(例如第2天的示例):

09:15 -> 14:45 -> 17:00

有谁知道我怎么能做到这一点?

亭子

假设您的数据称为$data迭代外部数组,并根据时间部分(在最内部的数组中)对每个中级数组进行排序。由于您的时间始终被格式化为“ hh:ss”,因此usort回调中的字符串比较可以完成此工作:

foreach ($data as &$events) {
    usort($events, function($a, $b) {
        return strcmp($a[0], $b[0]);
    });
}

请注意&中的foreach:,以确保您对原始数据进行排序,而不是对其进行复制。

如果您想创建一个新的数组$result,那么,然后执行此操作(&此处不行!):

foreach ($data as $day => $events) {
    usort($events, function($a, $b) {
        return strcmp($a[0], $b[0]);
    });
    $result[$day] = $events;
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章