php移动子数组foreach以在事件日历显示中运行

php移动子数组foreach以在事件日历显示中运行,php,arrays,function,nested,sub-array,Php,Arrays,Function,Nested,Sub Array,为了从API检索数据,我使用一个php库,它返回一个包含无序事件信息的对象 每个事件返回一周中每一天(周一、周二等)的布尔值 我的想法是: 迭代对象并测试工作日(太阳、周一等)的每个事件 如果是真的 创建并填充事件所需详细信息的数组 创建并填充工作日的事件数组数组 按事件时间对每个工作日进行排序 显示天事件 现在我正在使用: if ($class->DaySunday == 1) { //initialize or increment counter !isset($num_cla

为了从API检索数据,我使用一个php库,它返回一个包含无序事件信息的对象

每个事件返回一周中每一天(周一、周二等)的布尔值

我的想法是:

  • 迭代对象并测试工作日(太阳、周一等)的每个事件 如果是真的
  • 创建并填充事件所需详细信息的数组
  • 创建并填充工作日的事件数组数组
  • 按事件时间对每个工作日进行排序
  • 显示天事件
  • 现在我正在使用:

    if ($class->DaySunday == 1) 
    {   //initialize or increment counter
    !isset($num_classes) ? $num_classes = 0 : $num_classes++;
    //assemble Class details into array containing the day name
    $single_class = build_class('sunday',$class,$num_classes);
    //Create and populate @Day Schedule with Single Class arrays 
    foreach ($single_class as $class => $details)
        $sunday_schedule[$num_classes][$class] = $details;
    //Sort the Day Schedule by Hour, earliest to latest
    usort($sunday_schedule, "sortFunction");
    } 
    if ($class->DayMonday == 1) {}//etc...
    
    其中build_class()为每个类返回一个数组:

    function build_class($day_name,$class,$num_classes)
    {
    //Create and populate @Single Class details from ClassSchedule Object 
    $single_class['Class Name'] = $class->ClassDescription->Name;
    return $single_class;
    }
    
    似乎为每天创建事件数组的功能应该与为每个类创建数组的功能相同,但我似乎无法使其工作,因为它要么从每天创建一个巨大的事件数组,要么覆盖事件,使每天只剩下一个事件

    让上述五行代码在每个IF_is_特殊的_工作日函数中重复是很难看的,必须有一种更有效的方法。我是否需要动态构建每天数组的名称

    我甚至不确定首先从对象创建数组是否是最有效的方法

    换句话说:

    动态生成变量名no。将数组添加到另一个数组。因此,@周包含@天包含@类:

    Array (
        [monday] => Array (
            [0] => Array (
                [Class Name] => Work Out
                [Instructor] => General Meany
            )
        [tuesday] => Array (
            [0] => Array (
                [Class Name] => Dance
                [Instructor] => Ballerina
            )
        )
    )
    
    这是我的第一篇文章,我欢迎(也担心)你的见解-谢谢

    这是调用和函数:

    if ($class->DaySunday == 1) 
    {//initialize or increment counter for specific day
    !isset($sun_class_count) ? $sun_class_count = 0 : $sun_class_count++;
    $day_name = 'Sunday';
    //send Day, Object, Day Count and class and day arrays to build week function
    $week_schedule = build_week($day_name,$class,$sun_class_count,$single_class,$week_schedule);
    } 
    if ($class->DayMonday == 1)
    {!isset($mon_class_count) ? $mon_class_count = 0 : $mon_class_count++;
    $day_name = 'Monday';}//etc
    
    function build_week($day_name,$class,$class_count,$single_class,$week_schedule)
    {
    //Create and populate @Single Class details from ClassSchedule Object 
        $single_class['Class Name'] = $class->ClassDescription->Name;
        $single_class['Instructor'] = $class->Staff->Name; 
        $single_class['Class Type'] = $class->ClassDescription->SessionType->Name; 
    $single_class['Start Time'] = $class->StartTime;  
    $single_class['End Time'] = $class->EndTime;  
    $single_class['Day Name'] = $day_name; 
    $week_schedule[$day_name][$class_count] =  $single_class;
    
    return $week_schedule;          }
    

    非常感谢您的澄清@Gordon。当然,最终的代码很简单。似乎无法让代码显示在注释中。一旦我对一天中的时间进行排序,我将编辑上面的内容。(我认为使用usort)在另一篇文章中获得了一个很棒的简单方法,可以根据第三个嵌套数组中的值对第二个嵌套数组进行排序: