2011-10-14 45 views
0

我有以下字符串:將一個字符串轉換成數組

key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86||| 

如何使用PHP,我可以把它轉換成一個關聯數組?像:

echo $arr['surname']; 
Tesla 

我想它,但不能寫入正確的表達:

$str= "key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86|||"; 
preg_match_all("regex_here",$str,$out); 
unset($out[0]); 
$out = array_combine($out[1],$out[2]) ; 
print_r($out); 

感謝。

+1

如果這是你的信息存儲系統的設計,我建議你看一下JSON(特別是'json_encode'和'json_decode')作爲一種更簡單,更好的設計的系統。 – Ben

+1

請注意:您知道PHP的'serialize'和'unserialize'函數嗎?請參閱:http://nz.php.net/manual/en/function.serialize.php – KingJackaL

+0

你對這個正則表達式的嘗試是什麼? – mario

回答

2

這應該做你需要的東西:正如其他人所提到

$str= "key:surname +++ value:Tesla|||key:name +++ value:Nikola|||key:age +++ value:86|||"; 
preg_match_all("/key:(.*?) \+\+\+ value:(.*?)\|\|\|/", $str, $out); 
$out = array_combine($out[1], $out[2]) ; 
print_r($out); 

,不過,如果你是一個存儲這樣的數據,也有很多更好的方法來存儲數據,包括序列化和JSON,你可能想看看。

+0

這不起作用。它只返回最後一場比賽。 'array_combine'是錯誤的。否則,一個體面的解決方案 –

0

爲什麼有三個+和三個| 。如果它是你做到的。我想你可以把它改成一個。然後爆炸功能可以幫助你!

1

事情是這樣的:

preg_match_all("/:(\w+).*?:(\w+)/", $str, $matches); 
var_dump(array_combine($matches[1], $matches[2])); 
相關問題