0

$message以下のような名前の文字列変数があります。

        * Time Stamp: 2012-12-03 16:36:04 
        * Speed: 7 km/h 
        * Heading: 356 deg (N) 
        * Event ID: -48 
        * Event Desc: .Arrived at Inbound Receiving 
        * Event Value: -56
        * Event Value Type: 0

次に、次のコードを使用して、変数からイベントとタイムスタンプの値を抽出しようとします。

$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;
  }
   if(strpos($key, 'Time Stamp') > -1) {
   $time = $val;
  }
}

これはうまく機能しますが、唯一の問題は、返される値が次のとおりであることです。

.Arrived at Arrived at Inbound Receiving =

2012-12-03 16:36:04  =

等号はどこから来て、末尾のスペースと一緒に削除するにはどうすればよいですか?

私の期待される結果は次のようになります。

.Arrived at Arrived at Inbound Receiving

2012-12-03 16:36:04

これは、文字列変数でどのように表示されるかです。いつもありがとう。

4

4 に答える 4

2

あなたが試すことができます

preg_match_all("/ ([a-z ]+):([a-z0-9:\-. ]+)/i", $string,$match);
$values = array_combine($match[1], $match[2]) ;

echo $values['Time Stamp'] ,PHP_EOL ;
echo $values['Speed'] ,PHP_EOL ;
echo $values['Heading'] ,PHP_EOL ;
echo $values['Event Desc'] ,PHP_EOL ;
// .... etc

出力

 2012-12-03 16:36:04 
 7 km
 356 deg 
 .Arrived at Inbound Receiving  

オンラインデモ

于 2012-12-04T10:34:17.350 に答える
1

これにより、適切なキーと値が得られます。

list($key, $value) = explode(':', $line, 2);
$key = trim($key);
$value = trim(quoted_printable_decode($value));
于 2012-12-04T10:26:23.390 に答える
1

私の推測では、あなたは$message電子メールからコンテンツを取得していると思います。その場合は、最初にquoted_printable_decodeを使用してコンテンツを実行してみてください。

于 2012-12-04T10:26:23.263 に答える
0

使用する場合

echo $time;
echo $event;

2012-12-03 16:36:04 と表示されます。到着時受信のみ

于 2012-12-04T10:24:31.353 に答える