我想在字符串值內使用數組語法,然後在array()
中添加該變量。如何將類似數組的字符串轉換爲關聯數組?
像:
$value= "'user_type'=>'test','username'=>'test'";
$form_data = array($value);
所需的分配應該是:
$form_data = array('user_type'=>'test','username'=>'test');
但這不是我所得到的。
我想在字符串值內使用數組語法,然後在array()
中添加該變量。如何將類似數組的字符串轉換爲關聯數組?
像:
$value= "'user_type'=>'test','username'=>'test'";
$form_data = array($value);
所需的分配應該是:
$form_data = array('user_type'=>'test','username'=>'test');
但這不是我所得到的。
我會使用JSON
轉換。這應該工作:
// create a JSON string like:
$value = '{ "user_type":"test", "username":"test" }';
$form_data = json_decode($value, true);
// test it
var_dump($form_data);
這是一種使用parse_str()
- 這是一種直觀的,無循環的單線程的方法。這對我來說似乎是最好的選擇 - 我的意思是這是功能的目的!就像這個任務的強大解決方案一樣,它需要仔細的準備。
代碼:(Demo)
$value= "'user_type'=>'test1','username'=>'test2','monkey\'s wrench'=>'that\'s trouble'";
parse_str(stripslashes(str_replace(["'=>'","','"],['=','&'],trim($value,"'"))),$form_data); // second param is output variable
var_export($form_data);
這將竭誠爲您服務,除非你的 「鑰匙」 或 「價值」 包含的分界子。
str_replace()
將修改分隔符:
'=>'
成爲=
','
成爲&
stripslashes()
處理任何逃避的斜線。parse_str()
發揮其魔力直接產生關聯數組。我的方法行不通出的現成的,因爲
(string)
前綴和周圍的分界逗號可選間距的問題中重複的鏈接。我的方法特別適用於這種嚴格結構的一維關聯數組類字符串。
使用preg_match()
具有精心設計的圖案的方法,可以是值得信賴的,但正則表達式是斷然比字符串函數慢,可能會出現一個小回旋到未經訓練的眼睛。
使用eval()
的方法也是可能的,但是當所有其他方法都不能很好地完成工作時,該函數應該僅用作「計劃Z」,並且這些值需要經過嚴格驗證/極端偏見地過濾。
使用explode()
和foreach()
循環的方法將需要更大的代碼塊,我認爲這將是一個較慢的選擇(但可能不會)。在任何單個角色上爆炸都會導致數據混亂的風險增加;就像所有的解決方案一樣,額外關注保持數據不變是非常重要的。
verjas'方法似乎是一種合理的方法,但是當用雙引號替換單引號時,包含引號的鍵和值可能會變形。我將把準備代碼留在verjas中以適應單引號和雙引號。
的[字符串轉換爲關聯數組PHP]可能的複製(https://stackoverflow.com/questions/20569829/convert-string-to-associative-array-php) – Spectarion
上述欺騙鏈路是有道理的,但我會說這是一個永遠稍微不同的雪花,因爲它沒有圍繞分隔符的可選空格。雖然我支持dupe vote/flags,但我選擇發佈一個答案,這個答案是針對這個問題的示例輸入的更可預測的格式而設計的。 – mickmackusa