Php 基于另一个数组重写数组

Php 基于另一个数组重写数组,php,arrays,loops,Php,Arrays,Loops,所以这是一个奇怪的问题。我有两个数组,一个数组是事件列表。如果没有事件,它只有一个零。另一个数组,用于计算等于0的项数。基本上我不知道如何在第二个数组的基础上调整第一个数组 我想做的是创建一个数组,在第一个空数组之后删除一些空数组,然后重写值,说一些不同的东西…有点像这样。我想重写它,这样它就可以抓住给定的通用标题和事件时间,并基于0的第一个点和最后一个零值开始 基本上,我必须这样做的原因是我们正在尝试使用客户端api来制定时间表。问题是他们使用的api不适合他们想要显示的开放时间段。所以我要做

所以这是一个奇怪的问题。我有两个数组,一个数组是事件列表。如果没有事件,它只有一个零。另一个数组,用于计算等于0的项数。基本上我不知道如何在第二个数组的基础上调整第一个数组

我想做的是创建一个数组,在第一个空数组之后删除一些空数组,然后重写值,说一些不同的东西…有点像这样。我想重写它,这样它就可以抓住给定的通用标题和事件时间,并基于0的第一个点和最后一个零值开始

基本上,我必须这样做的原因是我们正在尝试使用客户端api来制定时间表。问题是他们使用的api不适合他们想要显示的开放时间段。所以我要做的是循环打开它们的小时数,根据事件时间添加事件,然后在事件之间创建空白事件。问题是我在创建空白事件方面有困难。 谢谢!我不是最好的php开发人员。实际上,我有一位同事帮我做到了这一点。我只是不知道如何/使用什么函数来实现这一点

理想阵列

IdealArray
(
[0600] => Array
   (
        [e_name] => No events
        [e_start] => 6000
        [e_end] => 1000
    )
[1000] => Array
    (
        [e_name] =>  Event One
        [e_start] => 1000
        [e_end] => 1100
    )
[1100] => Array
   (
        [e_name] => No events
        [e_start] => 1000
        [e_end] => 1630
    )
[1630] => Array
    (
        [e_name] => Event Number 2
        [e_start] => 1630
        [e_end] => 0930
    )
[0930] => Array
   (
        [e_name] => No events
        [e_start] => 0930
        [e_end] => 1100
    )
) 
电流阵列

First Array
(
[0600] => 0
[0630] => 0
[0700] => 0
[0730] => 0
[0800] => 0
[0830] => 0
[0900] => 0
[0930] => 0
[1000] => Array
    (
        [e_name] =>  Event One
        [e_start] => 1000
        [e_end] => 1100
    )

[1100] => 0
[1130] => 0
[1200] => 0
[1230] => 0
[1300] => 0
[1330] => 0
[1400] => 0
[1430] => 0
[1500] => 0
[1530] => 0
[1600] => 0
[1630] => Array
    (
        [e_name] => Event Number 2
        [e_start] => 1630
        [e_end] => 1930
    )

[1930] => 0
[2000] => 0
[2030] => 0
[2100] => 0
[2130] => 0
[2200] => 0
[2230] => 0
) 

Second Array
 (
[0] => 8
[1] => 11
[2] => 7
)

给定问题中提供的源数组(以下名为
$First\u array
),并假设它始终按时间顺序排列:

$start_time = '';               // keep track of "no event" starts
$summary = array();             // array for event summary

foreach ( $First_Array as $time => $event ) {

    if ( '' === $start_time ) { // empty string means new start
        $start_time = $time;
        $summary[$start_time] = array(
          'e_name' => 'No events', 'e_start' => $start_time, 'e_end' => ''
        );
    }

    if ( is_array($event) ) {                   // array means there's an event
        $summary[$start_time]['e_end'] = $time; // end last 'no events'
        $summary[$time] = $event;               // add event to summary
        $start_time = '';                       // reset start
    }
}
$summary[$start_time]['e_end'] = $time;         // get last end time
print_r($summary);
如果不能保证顺序,那么只需从键排序开始:
ksort($First\u Array)


完全不清楚重写背后的逻辑是什么。谢谢,我会编辑它。是否提供了第二个数组?或者是否需要从第一个数组生成该数组?我认为没有必要。我创建了第二个数组。它只计算每个数组之间有多少个数组等于零。它应该列在底部。这非常简单在我的思考过程中。