遍历数组来比较当前和下一个键索引

问题描述:

我正在遍历一个数组来比较当前和下一个键索引,以检查这些值是否相同。 我正在做两个数组:当条件满足时的第一个数组 - 当前和下一个键索引的值是相同的;第二个数组是数组的其余元素。遍历数组来比较当前和下一个键索引

但问题是在第二个数组中,我总是从第一个数组中获取一个元素。

[special_days_nested_array] => Array 
     (
      [0] => Array 
       (
        [day_name] => Tue 
        [start_time] => 05:00 am 
        [end_time] => 08:00 pm 
       ) 

      [1] => Array 
       (
        [day_name] => Fri 
        [start_time] => 06:00 am 
        [end_time] => 10:00 pm 
       ) 

      [2] => Array 
       (
        [day_name] => Sat 
        [start_time] => 12:00 am 
        [end_time] => 08:54 pm 
       ) 

      [3] => Array 
       (
        [day_name] => Sun 
        [start_time] => 12:00 am 
        [end_time] => 08:54 pm 
       ) 

     ) 

这是我用来比较相同的值的数组。

$j = 0; 
     foreach($data_set->special_days_nested_array as $key => $value){ 

      if(($data_set->special_days_nested_array[$j]['start_time'] == $data_set->special_days_nested_array[$j+1]['start_time']) && ($data_set->special_days_nested_array[$j]['end_time'] == $data_set->special_days_nested_array[$j+1]['end_time'])) { 
        //Days Array 
        $data_set->special_days_same_time_array[] = $data_set->special_days_nested_array[$j]['day_name']; 
        $data_set->special_days_same_time_array[] = $data_set->special_days_nested_array[$j+1]['day_name']; 
        //timings 
        $data_set->special_timings_same_time = $data_set->special_days_nested_array[$j]['start_time'].' - '.$data_set->special_days_nested_array[$j]['end_time']; 

      } 

      else{ 
       $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$key]['day_name']]['day_name'] = $data_set->special_days_nested_array[$key]['day_name']; 
       $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$key]['day_name']]['start_time'] = $data_set->special_days_nested_array[$key]['start_time']; 
       $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$key]['day_name']]['end_time'] = $data_set->special_days_nested_array[$key]['end_time']; 
      } 
      $j++; 

     } 

这里我遍历上面的数组,并比较当前和下一个元素。这是我成功比较的数组。

[special_days_same_time_array] => Array 
     (
      [0] => Sat 
      [1] => Sun 
     ) 

    [special_timings_same_time] => 12:00 am - 08:54 pm 

这是我从别的条件获取数组:

[special_time_different_time_array] => Array 
     (
      [Tue] => Array 
       (
        [day_name] => Tue 
        [start_time] => 05:00 am 
        [end_time] => 08:00 pm 
       ) 

      [Fri] => Array 
       (
        [day_name] => Fri 
        [start_time] => 06:00 am 
        [end_time] => 10:00 pm 
       ) 

      [Sun] => Array 
       (
        [day_name] => Sun 
        [start_time] => 12:00 am 
        [end_time] => 08:54 pm 
       ) 

     ) 

在这个阵列中,前两个元素是正确的,但第三个元素我得到的是不正确的。

我无法弄清确切的问题。

+0

所以,你要 [DAY_NAME] =>周六 [START_TIME] => 12:00 AM [END_TIME] => 08:54 pm 作为第三元素? – TNC 2015-03-31 07:15:16

+0

不,根据数组不应该有第三个元素。因为两天 - 星期六,太阳有同一时间,星期二,星期五有不同的时间。 – nirvair 2015-03-31 07:21:34

由于错误的循环实现,您的数组的绑定元素有问题。这是因为最后一个元素没有j+1 th元素,所以你总是会进入else条件的分支。

此外,您还可以将常规for语法与foreach语法混合使用。我会建议你用简单明了的操作for这种情况:

for($j = 0; $j < count(data_set->special_days_nested_array)-1; $j++){ 

     if(($data_set->special_days_nested_array[$j]['start_time'] == $data_set->special_days_nested_array[$j+1]['start_time']) && ($data_set->special_days_nested_array[$j]['end_time'] == $data_set->special_days_nested_array[$j+1]['end_time'])) { 
       //Days Array 
       $data_set->special_days_same_time_array[] = $data_set->special_days_nested_array[$j]['day_name']; 
       $data_set->special_days_same_time_array[] = $data_set->special_days_nested_array[$j+1]['day_name']; 
       //timings 
       $data_set->special_timings_same_time = $data_set->special_days_nested_array[$j]['start_time'].' - '.$data_set->special_days_nested_array[$j]['end_time']; 

     } 

     else{ 
      $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$j]['day_name']]['day_name'] = $data_set->special_days_nested_array[$j]['day_name']; 
      $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$j]['day_name']]['start_time'] = $data_set->special_days_nested_array[$j]['start_time']; 
      $data_set->special_time_different_time_array[$data_set->special_days_nested_array[$j]['day_name']]['end_time'] = $data_set->special_days_nested_array[$j]['end_time']; 
     } 

    } 
+0

太棒了!这工作! – nirvair 2015-03-31 09:38:11

+0

@phantomphoenix不客气! – zavg 2015-03-31 09:39:14