2012-12-04 30 views
0

我有一個字符串變量如下命名$message使用PHP字符串+返回未知等號的結果?

 * 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 = 

等號來自哪裏,我怎樣才能將它與t欄杆空間?

我預期的結果將是:

.Arrived at Arrived at Inbound Receiving 

2012-12-03 16:36:04 

這是怎麼出現在字符串變量。 一如既往地感謝。

+0

您可以添加您預期的結果也 – Baba

+0

正則表達式。這就是他們所做的。 – Jon

+0

這個'$ message'偶然來自電子郵件嗎? – sberry

回答

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   

Online Demo

+0

這真棒,謝謝巴巴。最後一個問題,我怎麼能設置值等於一個變量,如'$一個= $ values ['時間戳'],PHP_EOL;'顯然這是行不通的。再次感謝。 – Smudger

+0

爲什麼'echo $ values ['Event Desc'],PHP_EOL;'不工作,但剩下的工作呢?再次感謝@Baba – Smudger

+1

錯過了'.'看到更新的代碼... – Baba

0

如果使用

echo $time; 
echo $event; 

它會顯示2012年12月3日16:36:04 .Arrived在入站只接收

1

這會給你正確的密鑰和值。

list($key, $value) = explode(':', $line, 2); 
$key = trim($key); 
$value = trim(quoted_printable_decode($value)); 
+0

謝謝,我如何在現有的代碼中使用它? – Smudger

+1

把它放在現有代碼中'爆炸'的地方。 –

1

我的猜測是,您正在從電子郵件獲取$message內容。如果是這種情況,請嘗試先通過quoted_printable_decode運行內容。

+0

謝謝sberry。感謝你的時間。有點壓倒性的,我需要做我的閱讀。我是否正確:'$ messagetwo = return preg_replace('/ [^ \ r \ n] {73} [^ = \ r \ n] {2} /',「$ 0 = \ r \ n」,str_replace 「%」,「=」,str_replace(「%20」,「」,rawurlencode($ message))));' – Smudger

相關問題