2017-08-05 121 views
0

我想在字符串值內使用數組語法,然後在array()中添加該變量。如何將類似數組的字符串轉換爲關聯數組?

像:

$value= "'user_type'=>'test','username'=>'test'"; 
$form_data = array($value); 

所需的分配應該是:

$form_data = array('user_type'=>'test','username'=>'test'); 

但這不是我所得到的。

+3

的[字符串轉換爲關聯數組PHP]可能的複製(https://stackoverflow.com/questions/20569829/convert-string-to-associative-array-php) – Spectarion

+0

上述欺騙鏈路是有道理的,但我會說這是一個永遠稍微不同的雪花,因爲它沒有圍繞分隔符的可選空格。雖然我支持dupe vote/flags,但我選擇發佈一個答案,這個答案是針對這個問題的示例輸入的更可預測的格式而設計的。 – mickmackusa

回答

1

我會使用JSON轉換。這應該工作:

// create a JSON string like: 
$value = '{ "user_type":"test", "username":"test" }'; 
$form_data = json_decode($value, true); 
// test it 
var_dump($form_data); 
+0

沒有人需要在數組中使用 – Obaid

+0

請在回答中包含(編程式)「準備魔法」。 – mickmackusa

+0

是的謝謝.. – Obaid

0

這是一種使用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中以適應單引號和雙引號。

相關問題