格式化php for-loop

时间:2014-10-10 22:07:38

标签: php for-loop

所以我是php的新手,我正在编写一个脚本,以2014年1月23日晚上11:01&#34的形式记下时间戳。并将其分解为多维数组,其中包含月,日,年,小时和分钟的元素。这是我的代码:

$raw_data= array("January 20, 1993 at 10:20PM", "September 6, 1991 at 6:23PM");
        var_dump($raw_data);
        $num_dates= count($raw_data);

//Step 1: break content into month, day, year, hour, and minutes
    for ($i=0; $i=($num_dates-1); $i++) {   
        $partial_data = implode(preg_split("/[A-Z]{2}/", $raw_data[$i]));
        $broken_data[$i] = preg_split("/[\s,:]/", $partial_data);
        unset($broken_data[$i][2]);
        unset($broken_data[$i][3]);
}

出于某种原因,当我在终端中运行它时,它似乎是一个无限循环。我在一维数组上测试了for循环中的代码,输出是我所期望的,所以我很确定我的问题是因为我不知道如何在php中格式化for循环。有没有人看到一个明显的初学者错误?

4 个答案:

答案 0 :(得分:1)

这是分配值......

$i=($num_dates-1);

这是比较和你需要的:

$i < $num_dates

答案 1 :(得分:1)

正因如此:$i=($num_dates-1)您需要检查条件==,而不是使用作业=。虽然在这种情况下,您似乎想要执行以下操作:$i <= ($num_dates-1)。您可能刚忘记输入<

答案 2 :(得分:1)

不直接回答您的问题,但有更简单的方法来解析日期。您可以使用strtotime()从字符串转到时间戳,然后使用DateTime :: format()创建DateTime以访问日期部分。

http://php.net/manual/en/function.strtotime.php

http://php.net/manual/en/class.datetime.php

http://php.net/manual/en/datetime.format.php

答案 3 :(得分:0)

$broken_data = array();
$raw_data = array("January 20, 1993 at 10:20PM", "September 6, 1991 at 6:23PM");

foreach($raw_data as $date) { 
   if ($d = strtotime(str_replace(' at ', ', ', $date)))  
     $broken_data[] = array(
        date('F', $d), date('j', $d), date('Y', $d), date('G', $d), date('i', $d)
     );
}

var_dump($broken_data);

如果岁月在1901年以上且在2038年以下。