遍历数组以比较当前关键字索引和下一个关键字索引


Traversing array to compare current and next key index

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

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

[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
                )
        )

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

我无法弄清楚确切的问题。

由于循环实现不正确,数组的绑定元素出现问题。这是因为对于最后一个元素,并没有第1个CCD_元素,所以您将始终输入条件的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'];
        }
    }