2012-03-06 45 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