所以我是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循环。有没有人看到一个明显的初学者错误?
答案 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
答案 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年以下。