我目前正致力于为我的客户构建系统,该系统可归类为一种票务系统。但是,不是用户像普通系统那样输入票证,而是通过电子邮件格式从第三方(总是相同的第三方)接收票证。
我需要注意的是(我用各种方式思考,但似乎无法选出最佳方法)是从电子邮件中获取详细信息并将它们放入各个变量中。
将收到的电子邮件的一个示例是:
姓名:哈里史密斯 现状:已婚 地址:泰恩路14号 的Littlewood
曼彻斯特
MC2 3DN
电话:01551 221502
显然,完整的电子邮件还有很长的时间,但我正在做的是从电子邮件中提取详细信息,以便我可以根据新系统的要求处理它们。实际上,我正在寻找能够以下列风格存储信息的东西:
名称:%name%
状态:%status%
地址:%地址%
电话:%电话%
我还没有完全弄清楚如何对找到Name:
的字符串搜索进行编码,然后将其存储起来,直到达到Status:
为止。
任何帮助或指示都会很棒。
谢谢:)
答案 0 :(得分:3)
逐行读取数据文件。用“:”分解每一行。如果计数== 2那么你就知道你在新的令牌上,并且在这种情况下key = index [0]和value = index [1]。现在检查下一行,如果在运行爆炸后只有一个元素,只需将其添加到上一个键。
$email = ...;//email here
$email = str_replace(array("\r\n","\n\r","\n","\r"), "\r", $email); //fix line breaks
$emaillines = explode("\r", $email);
$result = array();
$key = "first";
foreach($emaillines as $line)
{
$parts = explode(":",$line,2);
if(count($parts)>1)
{
$key = $parts[0];
$result[$key] = $parts[1];
}
else
$result[$key] .= "\r".$parts[0];
}
print_r($result);
答案 1 :(得分:1)
您可以使用基本字符串操作和正则表达式从电子邮件中提取数据。以下代码可以作为起点。正则表达式有很大的改进空间。
<?php
$message = "Name: Harry Smith
Status: Married
Address: 14 Tyne Road,
Littlewood
Manchester
MC2 3DN
Telephone: 01551 221502";
preg_match(
"@" .
"^Name:(.*)" .
"^Status:(.*)" .
"^Address:(.*)" .
"^Telephone:(.*)" .
"@ms",
$message,
$match
);
var_dump($match);
// $match[1]...[4] contain the desired information
// you may want to trim() each value
?>
答案 2 :(得分:0)
您可以使用str_replace。
$string = str_replace("%name%", $name, $string);