2012-03-06 97 views
0

我已從服務中檢索到以下輸出。從字符串構建數組

輸出:

OK:設置用戶名確定:設置密碼OK:設置服務器狀態獲取網絡OK:簽到OK:獲得組成員組聯繫人列表聯繫人5551000008539名「司機2 「狀態脫機組聯繫人列表聯繫人5551000008540名稱」驅動程序3「狀態脫機組聯繫人列表聯繫人5551000008541名稱」驅動程序4「狀態脫機狀態連接客戶端擁有ID 5551000008535客戶端擁有ID 0客戶端擁有ID 5551000008535狀態斷開登錄被拒絕身份驗證錯誤客戶端擁有ID 0狀態脫機

我該如何提取da像以前一樣進入用戶數組?

我怎樣才能爆炸/內爆/ preg匹配或無論到用戶數組。像:

$users - Driver 2 => 5551000008539 
     Driver 3 => 5551000008540 
     Driver 4 => 5551000008541 
+0

後沒有換行「確定的? – 2012-03-06 20:37:19

+1

您可能需要發佈輸入字符串的確切格式(包括換行符)以獲取有效答案。 – rdlowrey 2012-03-06 20:40:40

+0

也許「:」是分隔符。但在我嘗試回答這個問題之前需要澄清。 – Graham 2012-03-06 20:40:42

回答

0

試試這個(假設$s包含我們的服務輸出):

preg_match_all("/contact-list contact (\\d+) name \"(.*?)\"/", $s, $out, PREG_PATTERN_ORDER); 

並創建名稱爲鍵和數字數組作爲值:

$result = array_combine($out[2], $out[1]); 
+0

Warning:array_combine()[function.array-combine]:兩個參數都應該有至少1個元素 – 2012-03-06 21:38:12

+0

賦值'$ s ='確定:set username OK:set密碼正常:設置服務器狀態獲取 - 網絡正常:登錄正常:get-group-members組聯繫人列表聯繫人5551000008539名稱「Driver 2」狀態脫機組聯繫人列表聯繫人5551000008540名稱「Driver 3」狀態離線組聯繫人 - 列表聯繫人5551000008541名稱「Driver 4」狀態離線狀態連接客戶端擁有ID 5551000008535客戶端擁有ID 0客戶端擁有ID 5551000008535狀態斷開登錄拒絕身份驗證錯誤客戶端擁有ID 0狀態脫機';' – 2012-03-06 21:56:11

1
<?php 
$str = 'OK: set username OK: set password OK: set server state acquiring-network OK: sign-in OK: get-group-members group contact-list contact 5551000008539 name "Driver 2" state offline group contact-list contact 5551000008540 name "Driver 3" state offline group contact-list contact 5551000008541 name "Driver 4" state offline state connecting client-own-id 5551000008535 client-own-id 0 client-own-id 5551000008535 state disconnecting sign-in denied auth-error client-own-id 0 state offline'; 
preg_match_all('@contact (\d+) name "(.+?)"@', $str, $matches, PREG_SET_ORDER); 
print_r($matches); 
$array = array(); 
foreach($matches as $match) { 
    $array[$match[2]] = $match[1]; 
} 
print_r($array); 

從$救國救民的數據一致時,留作練習。

+0

剛剛得到2個空陣列。Array()Array() – 2012-03-06 21:39:52