【发布时间】:2021-02-18 11:30:36
【问题描述】:
我正在尝试通过检查循环和下一个值匹配来重新排列我的数组。
这里如果当前元素值为0,下一个元素值为5
它将通过 $nextCheck 值进行检查
如果 5 之前的元素个数
我想将该值从 0 更改为 1
我当前的数组是这样的
$arr_calendar = array (
'2020-11-07' => Array
(
'18:00' => 5,
'18:15' => 5,
'18:30' => 0,
'18:45' => 0,
'19:15' => 0,
'19:30' => 0,
'20:00' => 5,
'20:15' => 5,
'20:30' => 5,
'20:45' => 5,
'21:00' => 5,
'21:15' => 5,
'21:30' => 5,
'21:45' => 5,
)
);
我预期的数组会是这样的
Array
(
[2020-11-07] => Array
(
[18:00] => 5
[18:15] => 5
[19:30] => 0
[18:45] => 0
[19:15] => 1
[19:30] => 1
[20:00] => 5
[20:15] => 5
[20:30] => 5
[20:45] => 5
[21:00] => 5
[21:15] => 5
[21:30] => 5
[21:45] => 5
)
)
为此我尝试过这样的
$arr_calendar = array (
'2020-11-07' => Array
(
'18:00' => 5,
'18:15' => 5,
'18:30' => 0,
'18:45' => 0,
'19:15' => 0,
'19:30' => 0,
'20:00' => 5,
'20:15' => 5,
'20:30' => 5,
'20:45' => 5,
'21:00' => 5,
'21:15' => 5,
'21:30' => 5,
'21:45' => 5,
)
);
$nextCheck =3;
foreach ($arr_calendar as $date => $arr_hour) {
$arr_hour_checked = array();
foreach ($arr_hour as $hour => $disable) {
$arr_hour_checked[] = array(
'hour' => $hour,
'disable' => $disable
);
}
$arr_hour_checked[] = array(// Fake for last item
'hour' => '',
'disable' => 99
);
for($index1 = 0; $index1 < count($arr_hour_checked); $index1++) {
if ($arr_hour_checked[$index1]['disable'] == 0) {
for($index2 = $index1 + 1; $index2 < count($arr_hour_checked); $index2++) {
if ($index2 - $index1 < $nextCheck) {
for ($step = $index1; $step < $index2; $step++) {
$arr_calendar[$date][$hour] = 1;
}
} else {
for ($step = $index2 - $nextCheck + 1; $step < $index2; $step++) {
$arr_calendar[$date][$hour] = 1;
}
}
$index1 = $index2 - 1;
break;
}
}
}
}
print_r ($arr_calendar);
请建议我在这里错过了什么 FIDDLE
对不起我的英语。如果 nextCheck = 3
一0后二1会来。 问:如果序列为 0,5,0,5
结果:将会是 1,5,1,5
问:如果序列为 1,5,1,5
结果:将会是 1,5,1,5
问: 如果 5,5,0,0,0,0,5,5,5,0,0,0,5,0,0,0,0,0,5
结果: 那么串口可以是这样的
5,5,0,0,1,1,5,5,5,0,1,1,5,0,0,0,1,1,5
【问题讨论】:
-
您能详细说明一下吗?基本上将所有 0 设置为 1 直到 $nextCheck - 1 ?
-
对不起我的英语。如果 nextCheck = 3 那么串行可以是这样的 5,5,0,0,1,1,5,5,5,0,1,1,5,0,0,0,1,1,5 @nice_dev
-
一0后二1会来。如果序列 0,5,0,5 它将是 1,5,1,5 @nice_dev
-
所以
0,5,0,5应该是0,1,1,5,0,1,1,5.. -
@nice_dev no, 0,5,0,5 将是 1,5,1,5 如果 0 大于 2 像 0,0,0,5 那么它将是 0,1,1 ,5
标签: php arrays loops multidimensional-array