我试图使用PHP将数据从JSON文件插入MYSQL,但数据不符合格式

时间:2016-06-09 02:18:22

标签: php mysql json

我目前陷入困境,因为根据我的代码,数据(在JSON文件中)未正确插入MYSQL。我正在使用PHP来编写代码。

从传输网站检索的原始数据(在JSON文件中):

"d": [
       {

        "CreateDate": "/Date(1465439077603)/", 
        "Distance": 0, 
        "IncidentID": 13229765, 
        "Latitude": 1.3018178035280734, 
        "Longitude": 103.91129992706466, 
        "Message": "(9/6)10:23 Roadworks on ECP (towards Changi Airport) after Still Rd Sth Exit. Avoid lane 3.", 
        "Summary": null, 
        "Type": "Road Work", 
        "__metadata": {
            "type": "LTAModel.Incident", 
            "uri": "http://datamall.mytransport.sg/LTAoDataService.svc/IncidentSet(13229765)"
        }
    }, 

正如您所见,"消息"包含3个部分 - 时间,日期,有关事件的消息。

因此,我正在使用preg_match打破"消息"开的:

           $message1 =preg_match("/^\(([0-9]+.+[0-9])\)([0-9]+.[0-9]+)\s(.+\s+.+)$/",$message,$messageArray);        

            if(isset($messageArray['1'])){
            $date = $messageArray['1'];
            echo $date. "<br/>";
            }
            if(isset($messageArray['2'])){
            $time = $messageArray['2'] ;
            echo $time. "<br/>";
            }
            if(isset($messageArray['3'])){
            $message3 = $messageArray['3'] ;
            echo $message3. "<br/>";    
            }               

我的代码格式化$ date值,因为它当前是8/6,我希望它是:2016-06-08

                if(preg_replace('/\/\d/', '/3/2016', $date)){

                $find = array('/\/3/', '/\/4/', '/\/5/');
                $replace = array('/3/2016', '/4/2016', '/5/2016');
                $result = preg_replace($find, $replace, $date);

                echo $result. "<br/>";

1 个答案:

答案 0 :(得分:1)

使用DateTime::createFromFormat

<?php
$input = '8/6';
$year = 2016;
$date = DateTime::createFromFormat('d/m', $input);
$dateAsIsoString = $date->format($year . '-m-d');

echo $dateAsIsoString;

如果一年总是当年,那么您可以使用format这样:

$dateAsIsoString = $date->format('Y-m-d');

因为DateTime::createFromFormat会根据格式自动创建具有当前年份的日期对象,如果它不在输入字符串中。