我在数组中有以下数据结构,我正在尝试计算总持续时间:
$elements = array(
'elementfrom-work' => "09:00",
'elementto-work' => "17:00",
'elementdays-work' => "5",
'elementfrom-karate' => "18:00",
'elementto-karate' => "20:00",
'elementdays-karate' => "3",
'elementfrom-stamp' => "21:00",
'elementto-stamp' => "22:00",
//it doest have the default days 'elementdays-stamp' set
//so it will take the default 7
'element-simple1' => "4", //it will take the default 7
'element-simple2' => "8", //it will take the default 7
'element-simple3' => "1",
'elementdays-simple3' => "1", //day is set
);
我已经设法做到了,但是我的代码很乱,对于每个项目,它都获取子字符串并运行另一个 for 循环来检查是否存在任何其他元素,当它不简单时(比如天数)。
我正在尝试为每个项目计算总持续时间,例如结果是:
Work:40
Karate:6
Stamp:7
Simple1=28
Simple2=56
Simple3=1
total duration:138
这可以不用两个 for 循环来完成吗?如何实现?如果不可能,您将如何计算。
最佳答案
我实际上发现这个问题很有趣,所以你可以这样做:
$elements[] = array(
'elementfrom-work' => "09:00",
'elementto-work' => "17:00",
'elementdays-work' => "7",
'elementfrom-karate' => "18:00",
'elementto-karate' => "20:00",
'elementdays-karate' => "3",
'elementfrom-stamp' => "21:00",
'elementto-stamp' => "22:00",
'a' => "21:00",
'b' => "22:00"
);
然后使用这两个函数:
function negative($x)
{
if($x < 0)
{
return -$x;
}
return $x;
}
function isTime($string)
{
$split = explode(":", $string);
if(isset($split[1]))
{
return true;
}
return false;
}
foreach($elements as $key => $val)
{
$total = 0;
$temp = 0;
$i = 0;
foreach($val as $innerKey => $time)
{
$isTime = isTime($time);
$split = explode(":", $time);
$h = $split[0];
switch($i)
{
case 0:
$temp -= $h;
break;
case 1:
$temp += $h;
break;
case 2:
if($isTime)
{
$mult = $temp *= 7;
$unsigned = negative($mult);
$total += $unsigned;
$temp = 0;
$temp -= $h;
$i = 0;
break;
}
$mult = $temp *= $h;
$unsigned = negative($mult);
$total += $unsigned;
$temp = 0;
$i = -1;
break;
default:
break;
}
$i++;
}
echo $total;
}
你对进位的想法有点古怪,但类似的东西应该有用。
关于php - 这可以在不使用两个 for 循环的情况下计算吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15284165/