遍历数组来比较当前和下一个键索引
问题描述:
我正在遍历一个数组来比较当前和下一个键索引,以检查这些值是否相同。 我正在做两个数组:当条件满足时的第一个数组 - 当前和下一个键索引的值是相同的;第二个数组是数组的其余元素。遍历数组来比较当前和下一个键索引
但问题是在第二个数组中,我总是从第一个数组中获取一个元素。
[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
)
)
在这个阵列中,前两个元素是正确的,但第三个元素我得到的是不正确的。
我无法弄清确切的问题。
答
由于错误的循环实现,您的数组的绑定元素有问题。这是因为最后一个元素没有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'];
}
}
所以,你要 [DAY_NAME] =>周六 [START_TIME] => 12:00 AM [END_TIME] => 08:54 pm 作为第三元素? – TNC 2015-03-31 07:15:16
不,根据数组不应该有第三个元素。因为两天 - 星期六,太阳有同一时间,星期二,星期五有不同的时间。 – nirvair 2015-03-31 07:21:34