doupo2241 2016-01-29 21:29
浏览 82

使用2个自定义条件对多维关联数组进行排序:(按星期几和膳食时间计量)

I have a multidimensional array which needs to be sorted by two custom criteria in order:

  1. Day of Week
  2. Meal of Day (breakfast/lunch/dinner)

Documentation of array_multisort() and uksort() have gotten me half way there each, but I am unable to put it all together meaningfully. Thank you for your time

Array
(
    [name] => hashbrowns
    [day] => monday
    [mealTime] => breakfast
)
Array
(
    [name] => Steak
    [day] => monday
    [mealTime] => dinner
)
Array
(
    [name] => Avacados
    [day] => tuesday
    [mealTime] => dinner
)
Array
(
    [name] => Peaches
    [day] => tuesday
    [mealTime] => lunch
)
Array
(
    [name] => Sammich
    [day] => monday
    [mealTime] => lunch
)
Array
(
    [name] => Kale & Sadness
    [day] => tuesday
    [mealTime] => breakfast
)

Desired output example:

Array
(
    [name] => hashbrowns
    [day] => monday
    [mealTime] => breakfast
)
Array
(
    [name] => Sammich
    [day] => monday
    [mealTime] => lunch
)
Array
(
    [name] => Steak
    [day] => monday
    [mealTime] => dinner
)
Array
(
    [name] => Kale & Sadness
    [day] => tuesday
    [mealTime] => breakfast
)
Array
(
    [name] => Peaches
    [day] => tuesday
    [mealTime] => lunch
)
Array
(
    [name] => Avacados
    [day] => tuesday
    [mealTime] => dinner
)
  • 写回答

3条回答 默认 最新

  • dongzhanlu8890 2016-01-29 22:32
    关注

    try this solution. Surely it can be done with php functions but what happened to you seems to work.

    $data = array(
    array("name" => "Otra cosa","day" => "thursday","mealTime" => "dinner"),
    array("name" => "hashbrowns","day" => "monday","mealTime" => "breakfast"),
    array("name" => "Steak","day" => "monday","mealTime" => "dinner"),
    array("name" => "Avacados","day" => "tuesday","mealTime" => "dinner"),
    array("name" => "Cuchu","day" => "monday","mealTime" => "breakfast"),
    array("name" => "Avacados 2","day" => "monday","mealTime" => "lunch"));
    
    
    
    $day = array("monday" => 0, "tuesday" => 1, "wednesday" => 2, "thursday" => 3, "friday" => 4, "saturday" => 5, "sunday" => 6);
    $mealTime = array("breakfast" =>0, "lunch" =>1, "dinner" => 2);
    
    
    $result = array();
    
    foreach($data as $values) {
        $d = $day[$values["day"]];
        $mt = $mealTime[$values["mealTime"]];
        if(!isset($result[$d])) {
            $result[$d] = array();
        }
        if(!isset($result[$d][$mt])) {
            $result[$d][$mt] = array();
        }
    
        $result[$d][$mt][] = $values;
        ksort($result[$d]);
    
    }
    ksort($result);
    $_result = array();
    
    foreach($result as $r) {
        foreach($r as $_r) {
            foreach($_r as $__r) {
                $_result[] = $__r;
            }
        }
    }
    
    return $_result;
    
    //print_r("<pre>");
    //print_r($_result);
    //print_r("</pre>");
    
    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算