0

我正在尝试从电子邮件管道中获取详细信息。管道将 $message 变量返回给我,其中包含分配的数据。我希望能够在字符串中搜索特定值并返回下一个“x”个字符。

例如,我的变量$message包含以下字符串:

Arrived at Inbound Receiving occurred

on M03-Actros 33.50 (1231) (MX1) (LT) 1022 on 2012-12-03

16:36:04



               * Driver ID: person, RT (1231) 

                * Vehicle Desc: M03-Actros 33.50 (1234) (MX1) (LT) 

                * Vehicle ID: 1022 

                * Time Stamp: 2012-12-03 16:36:04 

                * Latitude: S31 11.870' 

                * Longitude: E031 44.555' 

                * Speed: 7 km/h 

                * Heading: 356 deg (N) 

                * Event ID: -48 

                * Event Desc: .Arrived at Inbound Receiving 

                * Event Value: -56

                * Event Value Type: 0 

然后我想过滤掉事件描述。所以搜索$message字符串“事件描述:”,然后返回该行的剩余数据。所以从上面的例子中,我想将变量'$event'的值设置为'.Arrived at Inbound Receiving'

我知道我必须使用

if (strstr($subject, 'Event Desc: ')) {

}

但我不确定如何返回行上的剩余数据,因为数据的长度可能会有所不同。

一如既往地感谢任何帮助,谢谢。

4

1 回答 1

1

我建议这样做:

$event = null;
$lines = explode(PHP_EOL, $message);
foreach($lines as $line) {
  // skip empty lines
  if(strlen($line) == 0) {
    continue;
  }
  $tokens = explode(':', $line);
  // tokens[0] contains the key , e.g. Event Value
  // tokens[1]~[N] contains the value (where N is the number of pieces), e.g. -56
  // stitch token 1 ~ N
  $key = $tokens[0]; 
  unset($tokens[0]);
  $val = implode(':', $tokens);
  // do your extra logic here, e.g. set $event variable to value
  if(strpos($key, 'Event Desc') > -1) {
    $event = $val;
  }
}

限制:您的数据不能包含:

于 2012-12-04T08:40:13.703 回答