我想用php解析一个元文件并将数据存储到我的数据库中。在这种情况下,我想找到以#
开头的行,并将日期保存到mySQL数据库中:
18923081293801293.animal=cat
#Tue Jun 14 12:40:44 CEST 2015
18923081293801293.name=Fred
18923081293801293.age=24
到目前为止,这是我的代码。它正在解析animal
,name
和age
。
$properties = array();
foreach ($linesArray AS $line) {
if (false !== ($pos = strpos($line, '='))) {
$prop=array();
$prop[trim(substr($line, 0, $pos))] = trim(substr($line, $pos + 1));
$lineContArray = explode("=", $line);
$identArray = explode(".", $lineContArray[0]);
$ident = $identArray[0];
$type = $identArray[1];
$value = $lineContArray[1];
$found = 0;
for ($i=0; $i<count($properties); $i++) {
if ($properties[$i]['number'] == $ident) {
$properties[$i][$type]= $value;
$found=1;
break;
}
}
if ($found == 0) {
if (!empty($type)) {
$properties[] = array('number' => $ident, $type => $value);
} else {
$properties[] = array($ident => $value); }
}
}
}
$sql = "INSERT INTO farm (animal,name,age) values(?,?,?) ";
$q = $pdo->prepare($sql);
foreach($properties as $row) {
$q->execute(array($row['animal'], $row['name'], $row['age']));
}
但我不知道如何解析日期行并将其作为日期(列类型:datetime)存入我的数据库。
答案 0 :(得分:1)
要从文件中获取日期,您需要在循环内的行的开头检查#
:
foreach ($linesArray AS $line) {
// Check for # as first character (but only if there is a first character).
if (strlen($line) && $line[0] == '#') {
// Convert everything except the first character to a date.
$date = strtotime(substr($line, 1));
// Convert it back to a string in a format that MySQL likes.
$strDate = date("y-m-d H:i:s", $date);
}
// Here the rest of your old continues.
if (false !== ($pos = strpos($line, '='))) {
...
然后您可以像插入其他值一样将其插入数据库中。不确定这完全适合你的代码,因为我不了解所有这些,但它应该给你一个如何做到至少的提示。
答案 1 :(得分:1)
以下代码将行转换为日期,可以插入到DB。
if ($line[0] == '#') //if line start with
{
$line = str_replace('#', '',$line); //remove # from line
$dates = new DateTime($line); //convert line to date time
$reformdate = $dates -> format("Y-m-d H:i:s"); //format date to as required style
}
创建一个数据类型为&#34; datetime&#34;的列你可以插入如下例子。
INSERT INTO tablename (dateandtime) VALUES ('$reformdate');
在你的情况下,将$ reformdate添加到$ properties数组并将其添加到PDO中。