我有一个来自API的字符串,需要将其放入一个数组中才能使用它,但我找不到任何解决方案。我希望有人可以提供帮助。
字符串如下所示:
domain: xxx.de native_domain: xxx.de user: master status: active transfer_lock: yes auto_renew: yes delegation: yes ownerc: ASDASD1 adminc: ASDASD1 techc: ASDASD1 billc: FLOSCH2 created: 2015-08-25 10:31:08 modified: 2016-08-20 16:20:15 expire: 2017-08-25 10:31:13 chreseller_auth: dom-cdmv-zs0f-mpwg auth_info: dns::1/hostname: dns1.xxx.com dns::1/hostip: dns::2/hostname: dns2.xxx.com dns::2/hostip: dns::3/hostname: dns::3/hostip: dns::4/hostname: dns::4/hostip: dns::5/hostname: dns::5/hostip: comment: inserted: 2016-01-29 23:46:29
像这样的完整字符串
domain: xxx.de native_domain: xxx.de user: master status: active
transfer_lock: yes auto_renew: yes delegation: yes ownerc: ASDASD1
adminc: ASDASD1 techc: ASDASD1 billc: FLOSCH2 created: 2015-08-25
10:31:08 modified: 2016-08-20 16:20:15 expire: 2017-08-25 10:31:13
chreseller_auth: dom-cdmv-zs0f-mpwg auth_info: xxxxx_authinfo
dns::1/hostname:
dns1.xxx.com dns::1/hostip: 1.1.1.1 dns::2/hostname: dns2.xxx.com
dns::2/hostip: 1.1.1.1 dns::3/hostname: dns3.xxx.com
dns::3/hostip: 1.1.1.1 dns::4/hostname: dns4.xxx.com
dns::4/hostip: 1.1.1.1 dns::5/hostname: dns5.xxx.com dns::5/hostip:
1.1.1.1 comment: comments inserted:
2016-01-29 23:46:29
非常感谢你的帮助。
答案 0 :(得分:0)
我的解决方案(将其发布到phpfiddle):
$text = "domain: xxx.de native_domain: xxx.de user: master status: active transfer_lock: yes auto_renew: yes delegation: yes ownerc: ASDASD1 adminc: ASDASD1 techc: ASDASD1 billc: FLOSCH2 created: 2015-08-25 10:31:08 modified: 2016-08-20 16:20:15 expire: 2017-08-25 10:31:13 chreseller_auth: dom-cdmv-zs0f-mpwg auth_info: dns::1/hostname: dns1.xxx.com dns::1/hostip: 1.1.1.1 dns::2/hostname: dns2.xxx.com dns::2/hostip: 1.1.1.1 dns::3/hostname: dns::3/hostip: dns::4/hostname: dns::4/hostip: dns::5/hostname: dns::5/hostip: comment: xxx inserted: 2016-01-29 23:46:29";
preg_match_all("/\S+/", $text, $matches);
$array = array();
foreach ($matches[0] as $match)
{
if (preg_match("/:$/", $match))
{
$current_key = $match;
$array[$current_key] = "";
continue;
}
else
{
$array[$current_key] .= ($array[$current_key] == "") ? $match : " $match";
}
}
echo "<pre>"; print_r($array); echo "</pre>";
所以会发生的事情是我得到的所有东西都不是空间,这意味着我得到了&#34;域:&#34;,&#34; xxx.de&#34;等等。
对于每个捕获的组,我检查它是否以:
结束,如果是,则它是密钥,如果没有,则将其与密钥一起保存到字典中。
不确定格式是否是您想要的格式,但我认为您应该可以从这里处理它。
PS:如果您愿意,可以更改文本内容。
答案 1 :(得分:0)
以下是您可以解决的问题,假设响应是一个完整的字符串,每个响应中具有相同的术语,您有一个预先定义的'needle'数组可以查看并且它会分离字符串在两根针之间进入自己的阵列。在这种情况下,两个针是要查找的两个术语,例如'domain:'和'native_domain:'。
<?php
$responseStr = "domain: xxx.de native_domain: xxx.de user: master status: active transfer_lock: yes auto_renew: yes delegation: yes ownerc: ASDASD1 adminc: ASDASD1 techc: ASDASD1 billc: FLOSCH2 created: 2015-08-25 10:31:08 modified: 2016-08-20 16:20:15 expire: 2017-08-25 10:31:13 chreseller_auth: dom-cdmv-zs0f-mpwg auth_info: dns::1/hostname: dns1.xxx.com dns::1/hostip: dns::2/hostname: dns2.xxx.com dns::2/hostip: dns::3/hostname: dns::3/hostip: dns::4/hostname: dns::4/hostip: dns::5/hostname: dns::5/hostip: comment: inserted: 2016-01-29 23:46:29";
$responseArray = [
'domain:',
'native_domain:',
'user:',
'status:',
'transfer_lock:',
'auto_renew:',
'delegation:',
'ownerc:',
'adminc:',
'techc:',
'billc:',
'created:',
'modified:',
'expire:',
'chreseller_auth:',
'auth_info:',
'dns::1/hostname:',
'dns::1/hostip:',
'dns::2/hostname:',
'dns::2/hostip:',
'dns::3/hostname:',
'dns::3/hostip:',
'dns::4/hostname:',
'dns::4/hostip:',
'dns::5/hostname:',
'dns::5/hostip:',
'comment:',
'inserted:',
"\r"
];
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
for ($i = 0; $i < sizeof($responseArray) - 1; $i++) {
$finalArr[$responseArray[$i]] = trim(get_string_between($responseStr, $responseArray[$i], $responseArray[$i+1]));
}
?>
<pre>
<?php var_dump($finalArr); ?>
</pre>
这将提供以下输出;
array(28) {
["domain:"]=>
string(6) "xxx.de"
["native_domain:"]=>
string(6) "xxx.de"
["user:"]=>
string(6) "master"
["status:"]=>
string(6) "active"
["transfer_lock:"]=>
string(3) "yes"
["auto_renew:"]=>
string(3) "yes"
["delegation:"]=>
string(3) "yes"
["ownerc:"]=>
string(7) "ASDASD1"
["adminc:"]=>
string(7) "ASDASD1"
["techc:"]=>
string(7) "ASDASD1"
["billc:"]=>
string(7) "FLOSCH2"
["created:"]=>
string(19) "2015-08-25 10:31:08"
["modified:"]=>
string(19) "2016-08-20 16:20:15"
["expire:"]=>
string(19) "2017-08-25 10:31:13"
["chreseller_auth:"]=>
string(18) "dom-cdmv-zs0f-mpwg"
["auth_info:"]=>
string(0) ""
["dns::1/hostname:"]=>
string(12) "dns1.xxx.com"
["dns::1/hostip:"]=>
string(0) ""
["dns::2/hostname:"]=>
string(12) "dns2.xxx.com"
["dns::2/hostip:"]=>
string(0) ""
["dns::3/hostname:"]=>
string(0) ""
["dns::3/hostip:"]=>
string(0) ""
["dns::4/hostname:"]=>
string(0) ""
["dns::4/hostip:"]=>
string(0) ""
["dns::5/hostname:"]=>
string(0) ""
["dns::5/hostip:"]=>
string(0) ""
["comment:"]=>
string(0) ""
["inserted:"]=>
string(0) ""
}