2011-12-31 81 views
0

我試圖找出如何只讀夫婦需要從前夜,在線殺郵件數據庫線中的一部分:如何讀取輸入

二○一一年十二月三十〇日23:26

受害者:安娜貝爾色
公司:暗影壩段
聯盟:xXDEATHXx
的陰影 派系:無
銷燬處理:獵豹
系統:C6CG-W
安全性:0.0
傷害轉化:827個

參與者:

名稱:米萊娜Dush
安全性:0.6
公司:NXO
聯盟:無畏隧道
派系:無
船舶:獵犬
武器:加達裏海軍鞭炮魚雷
傷害完成:457

銷燬物品:

姐妹延伸探針發射器
催化冷氣電弧噴射推進
納米纖維內部構架II
超載注噴系統II
硬連線 - Genolution核心增強CA-2(貨物)
Nanite工程(貨運)
姐妹核心掃描儀探針,數量:5(貨物)
微輔助電源核心我(貨物)
姐妹深空掃描探針,數量:5(貨物)

掉落的物品:

隱祕行動隱形裝置II
姐妹戰鬥掃描儀探頭,數量:5
躍遷擾斷器II
納米纖維內部構架II
天體測量精確定位(貨物)
小型引力電容器升級I,數量:2(貨物)
打撈器I(貨物)
攔截器(貨物)
個 熱力學(貨物)
協處理器I(貨物)

當用戶輸入的killmail成多文本框我只需要讀取被破壞的項目和掉落的物品,並具有數量在一個單獨的串。

有沒有辦法做到這一點?

+1

正則表達式,簡單明瞭。 – Cyclone 2011-12-31 00:14:03

+0

做無數量的項目是指數量是1嗎? – alex 2011-12-31 00:23:15

+0

[這裏是開始](http://codepad.viper-7.com/7SNbmH)。 – alex 2011-12-31 00:38:50

回答

-1
<?php 
$str = " 2011.12.30 23:26 

    Victim: Annabel Lust 
    Corp: Shadow Monolith 
    Alliance: Shadow of xXDEATHXx 
    Faction: None 
    Destroyed: Cheetah 
    System: C6CG-W 
    Security: 0.0 
    Damage Taken: 827 

    Involved parties: 

    Name: Milena Dush 
    Security: 0.6 
    Corp: nXo 
    Alliance: Intrepid Crossing 
    Faction: None 
    Ship: Hound 
    Weapon: Caldari Navy Bane Torpedo 
    Damage Done: 457 

    Destroyed items: 

    Sisters Expanded Probe Launcher 
    Catalyzed Cold-Gas Arcjet Thrusters 
    Nanofiber Internal Structure II 
    Overdrive Injector System II 
    Hardwiring - Genolution Core Augmentation CA-2 (Cargo) 
    Nanite Engineering (Cargo) 
    Sisters Core Scanner Probe, Qty: 5 (Cargo) 
    Micro Auxiliary Power Core I (Cargo) 
    Sisters Deep Space Scanner Probe, Qty: 5 (Cargo) 

    Dropped items: 

    Covert Ops Cloaking Device II 
    Sisters Combat Scanner Probe, Qty: 5 
    Warp Disruptor II 
    Nanofiber Internal Structure II 
    Astrometric Pinpointing (Cargo) 
    Small Gravity Capacitor Upgrade I, Qty: 2 (Cargo) 
    Salvager I (Cargo) 
    Interceptors (Cargo) 
    Thermodynamics (Cargo) 
    Co-Processor I (Cargo) 
"; 

var_dump(parseItems('/Destroyed items:(?P<destroyedItems>.*)Dropped items:/is', $str, 1)); 
var_dump(parseItems('/Dropped items:(?P<droppedItems>.*)/is', $str, 1)); 
function parseItems($regex, $str, $defaultQty = 0){ 
    preg_match($regex, $str, $match); 
    $lines = explode("\n", $match[1]); 
    $defaultQty = 0; 
    $items = array(); 
    foreach($lines as $key => $line){ 
     $line = trim($line); 
     if($line != ""){ 
      $quantity = (strpos($line, "Qty:") != false) ? getQty($line) : $defaultQty; 
      $items[] = array($line => $quantity); 
     } 
    } 
    return $items; 
} 

function getQty($line){ 
    preg_match('/, Qty:\s+(?P<quantity>[0-9]+)/', $line, $match); 
    return $match['quantity']; 
} 

這應該會給你一個數組的丟棄和毀壞行數。它返回關聯數組,其中key是行,value是數量。

+3

閱讀問題,而不僅僅是標題。 – KingCrunch 2011-12-31 00:09:29

+0

是的,這是不是幫助我,因爲殺死郵件不同,從長度;) – Crash2k 2011-12-31 00:13:19

+0

對不起,我應該看過這個問題吧.. @ Crash2k,我不知道什麼是殺郵件,它有像上面那樣的具體格式? – Mo3z 2011-12-31 00:17:48

0

您可以使用爆炸(分隔符,文本)來分割兩個文本和數組。例如: $ str = explode(「:」,「YourText」);