簡體   English   中英

將PHP字符串拆分為數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM