我在php中有一系列数据(class_time)存储。我希望比较当主管创建课程时防止时间碰撞的日期和时间。所以我使用list()
& split()
用于分隔我的数据。数据格式是
周五,11:00-13:00
这是我用来跟踪它的代码。
while($row8=mysqli_fetch_assoc($result8){
$preclasstime=$row8['class_time'];
list($day, $starthrs,$startmin,$endhrs,$endmin) = split('[,:-:]', $preclasstime);
if($day==$_POST['csday']){
$numstarthrs=(int)$starthrs;
$numstartmin=(int)$startmin;
$tottimestart=($numstarthrs*100)+($numstartmin);
$numendhrs=(int)$endhrs;
$numendmin=(int)$endmin;
$tottimeend=($numendhrs*100)+($numendmin);
echo "$numendmin \n";
}
然而,在我执行它之后,它可以成功获得$day
,$starthrs
,$startmin
,但当转为$endhrs
,$endmin
时,它不能很好地运作。它将跳过其中一个$endhrs
并直接跳至$endmin
。
例如:
$ tottimestart = 1100但$ tottimeend = 0000,它会忽略13.
答案应该是1300.
如果另一个例子如:Fri,11:00-13:30,$ tottimeend应该等于1330。
我不知道导致它跳过我的一个值的错误在哪里。
答案 0 :(得分:2)
split()在PHP 5.3.0中已弃用,并在PHP 7.0.0中被删除。
此功能的替代方案包括:preg_split()
以下是您问题的解决方案:
$keywords = preg_split('/[\s,\s:\s-\s:\s]+/', "Fri, 11:00-13:30");
$day = $keywords[0];
$tottimestart = $keywords[1]*100 + $keywords[2];
$tottimeend = $keywords[3]*100 + $keywords[4];
echo $day."<br />";
echo $tottimestart."<br />";
echo $tottimeend."<br />";
答案 1 :(得分:1)
如果您指定的格式始终遵循:
,您可以轻松地执行此操作<?php
$data = "Fri, 11:00-13:30";
list($day,$timingData) = explode(',', $data);
list($startTime,$endTime) = explode('-', $timingData);
$startTime = str_replace(':', '', $startTime);
$endTime = str_replace(':', '', $endTime);
echo "Day: $day <br/>";
echo "startTime: $startTime <br/>";
echo "endTime: $endTime";
?>
输出:
Day: Fri
startTime: 1100
endTime: 1330
答案 2 :(得分:1)
在转换为interger之前使用concatenator加入字符串
<?php
$data = "Fri, 11:00-13:30";
list($day, $starthrs,$startmin,$endhrs,$endmin) = preg_split('[,|:|-]', $data);
echo 'Day: ' . $day;
echo '<br>Start: ' . (int)$tottimestart = $starthrs . $startmin;
echo '<br>End: ' . (int)$tottimesend = $endhrs . $endmin;
?>
答案 3 :(得分:0)
将此模式应用于preg_split()
:
/[ ,:-]+/
它将使用字符类中的一个或多个字符作为分隔符。这样可以确保删除跟踪逗号的空格。
代码:(Demo)
$row8['class_time']='Fri, 11:00-13:00';
var_export(preg_split('/[ ,:-]+/',$row8['class_time']));
输出:
array (
0 => 'Fri',
1 => '11',
2 => '00',
3 => '13',
4 => '00',
)
当然,您可以将list()
来电附加到var_export()
。