使用拆分功能从php数据中使用不同的符号分隔时间和日期

时间:2017-09-03 03:17:28

标签: php regex split preg-split

我在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。

我不知道导致它跳过我的一个值的错误在哪里。

4 个答案:

答案 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()