PHP以块的形式读取文件中的行

PHP以块的形式读取文件中的行,php,Php,我有一个包含数据块的日志文件。举例如下。正如您可以在每个块中看到的,recv_time、Span、From Number、Timestamp、Type、SMS SMSC Number和内容都是重复的。我想用php获取它们的值并保存在数据库表中。每个块都有自己的值。我们将非常感谢你的帮助。谢谢 ----SMS_START---- recv_time:2014-10-09 18:32:39 Span: 1 From-Number: +1347XXXXXXX Timestamp: 14/10/09 1

我有一个包含数据块的日志文件。举例如下。正如您可以在每个块中看到的,recv_time、Span、From Number、Timestamp、Type、SMS SMSC Number和内容都是重复的。我想用php获取它们的值并保存在数据库表中。每个块都有自己的值。我们将非常感谢你的帮助。谢谢

----SMS_START----
recv_time:2014-10-09 18:32:39
Span: 1
From-Number: +1347XXXXXXX
Timestamp: 14/10/09 18:32:16 96
Type: PDU
SMS-SMSC-Number: +12404492163
Content: Thanks,


----SMS_END----

----SMS_START----
recv_time:2014-10-09 18:35:00
Span: 1
From-Number: +1347XXXXXXX
Timestamp: 14/10/09 18:34:37 96
Type: PDU
SMS-SMSC-Number: +12404492163
Content: Thanks


----SMS_END----

----SMS_START----
recv_time:2014-10-10 18:04:05
Span: 1
From-Number: +28809090
Timestamp: 14/10/09 23:03:42 96
Type: PDU
SMS-SMSC-Number: +12404492163
Content: AT&T Free Msg: If this was done in error, please call 611 or 800.901.9878.


----SMS_END----

我猜您没有代码,下面是一些伪代码:

entries = {}
entry = empty
foreach lines in file do
    if line is startTag then
        entry = {} -- initilize empty entry
    elseif line is endTag then
        entries.add(entry)
    else
        entry.set(line.to(':'), line.till(':'))
    end
end
这是一种无优化且容易出错的算法。

尝试一下它的工作原理

<?
$file = file("data.txt");
foreach($file as $key => $value)
{
$filter_value = trim($value);
if($filter_value!="" && $filter_value!="----SMS_START----" && $filter_value!="----SMS_END----"){
$new_array[] = $value;
$my_array = array_chunk($new_array, 7);
}
}
$count = count($my_array);
for($I=0;$I<$count;$I++){
foreach($my_array[$I] as $key => $value){
$ss = explode(":", $value);
$mm_array[$I][$ss[0]] = str_replace($ss[0].":", "", $value);
}
}


echo "<pre>";
print_r($mm_array);
echo "</pre>";
?>
现在,您可以轻松地插入到数据库中


享受吧

到目前为止你试过什么?你有什么密码?您考虑过哪些方法适用于您的场景?在这个问答风格的网站上,我们不能这样引导你,我们只能直接帮助你提供你需要帮助的代码。这是到目前为止我所做的。它返回值,但我仍然不知道如何将这些值保存在单独的变量中@汗:您需要将PHP代码的当前状态发布到相关部分。当我运行代码时,我得到以下格式的结果2014-10-09 18:32:39 1+1347xxxxx 14/10/09 18:32:16 96 PDU+12404492163谢谢,2014-10-09 18:35:00 1+1347XXXXXXX 14/10/09 18:34:37 96 PDU+12404492163谢谢2014-10-09 23:04:05 1+28809090 14/10/09 23:03:42 96 PDU+12404492163 AT&T免费消息:如果这是错误的,请致电611或800.901.9878。这里我想把这些值保存在变量上。上面是我的日志文件,一次一次地获取新数据。是否有任何方法可以只读取文件中新添加的条目块?而不是从文件的开头到结尾开始读取文件。此文件大小很快将以GB为单位。谢谢
Array
(
[0] => Array
    (
        [recv_time] => 2014-10-09 18:32:39

        [Span] =>  1

        [From-Number] =>  +1347XXXXXXX

        [Timestamp] =>  14/10/09 18:32:16 96

        [Type] =>  PDU

        [SMS-SMSC-Number] =>  +12404492163

        [Content] =>  Thanks,

    )

[1] => Array
    (
        [recv_time] => 2014-10-09 18:35:00

        [Span] =>  1

        [From-Number] =>  +1347XXXXXXX

        [Timestamp] =>  14/10/09 18:34:37 96

        [Type] =>  PDU

        [SMS-SMSC-Number] =>  +12404492163

        [Content] =>  Thanks

    )

[2] => Array
    (
        [recv_time] => 2014-10-10 18:04:05

        [Span] =>  1

        [From-Number] =>  +28809090

        [Timestamp] =>  14/10/09 23:03:42 96

        [Type] =>  PDU

        [SMS-SMSC-Number] =>  +12404492163

        [Content] =>  AT&T Free Msg: If this was done in error, please call 611 or    800.901.9878.

    )

)