[英]Split PHP String to Array
我有一個來自API的字符串,需要將其放入一個數組中才能使用它但我找不到任何解決方案。 我希望有人能幫幫忙。
字符串看起來像這樣:
domain:xxx.de native_domain:xxx.de user:master status:active\n transfer_lock:yes auto_renew:yes delegation:yes ownerc:ASDASD1\n adminc:ASDASD1 techc:ASDASD1 billc:FLOSCH2創建時間:2015-08-25\n 10:31:08修改時間:2016-08-20 16:20:15到期日:2017-08-25 10:31:13\n chreseller_auth:dom-cdmv-zs0f-mpwg auth_info:dns :: 1 / hostname:\n dns1.xxx.com dns :: 1 / hostip:dns :: 2 / hostname:dns2.xxx.com\n dns :: 2 / hostip:dns :: 3 / hostname:dns :: 3 / hostip:dns :: 4 / hostname:\n dns :: 4 / hostip:dns :: 5 / hostname:dns :: 5 / hostip:comment:inserted:\n 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
非常感謝你的幫助。
我的解決方案(發布到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>";
所以會發生的是我得到的所有東西都不是空格,這意味着我得到了“domain:”,“xxx.de”等。
對於每個捕獲的組,我檢查它是否以:
結束,如果是,那么它是密鑰,如果沒有,則它會被密鑰保存到字典中。
不確定格式是否是您完全想要的,但我認為您應該能夠從這里處理它。
PS:如果您願意,可以更改文本內容。
這里有一些你可以解決的問題,假設響應是一個完整的字符串,每個響應中有相同的術語,你有一個預先定義的'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) ""
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.