PHP以块的形式读取文件中的行
我有一个包含数据块的日志文件。举例如下。正如您可以在每个块中看到的,recv_time、Span、From Number、Timestamp、Type、SMS SMSC Number和内容都是重复的。我想用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
----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.
)
)