2014-02-13 22 views
4

我有串像下面將字符串轉換成數組在PHP

["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza 

而我試圖轉換成數組像下面

$arr["Day1"]["Morning"] = "mutton"; 
$arr["Day1"]["Evening"] = "Juice"; 
$arr["Day2"]["morning"] = "burger"; 
$arr["Day2"]["evening"] = "pizza"; 

我想是這樣的下面。

$str = '["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza'; 
$pieces = explode("&", $str); 

foreach($pieces as $pie) 
{ 
$arr.$pie; 
} 
var_dump($arr); 

我知道上面的代碼真的很笨:/。是否有任何適當的解決方案呢?

+0

你是怎麼得到這些數據的?這看起來不太標準。 –

+0

在我的客戶端數據庫中有這樣的大數據..我正在嘗試清理它 – Vishnu

回答

5

你可以做這樣的...

<?php 
$str='["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza'; 
$arr = explode('&',$str); 
foreach($arr as $v) 
{ 
    $valarr=explode('=',$v); 
    preg_match_all('/"(.*?)"/', $valarr[0], $matches); 
    $narr[$matches[1][0]][$matches[1][1]]=$valarr[1]; 
} 

print_r($narr); 

OUTPUT :

Array 
(
    [Day1] => Array 
     (
      [Morning] => mutton 
      [Evening] => Juice 
     ) 

    [Day2] => Array 
     (
      [Morning] => burger 
      [Evening] => pizza 
     ) 

) 

你可以訪問諸如echo $arr["Day1"]["Morning"]它打印mutton

Demo

+1

完美像一塊蛋糕:D,我可以知道你在循環內做什麼嗎? – Vishnu

+0

循環內部的元素使用'='分解,最後一個元素被分配爲值。而第一個元素檢查雙引號匹配,並且他們被另一個數組'$ matches'追上。所以這些值作爲新數組的關鍵字。 –

4

它看起來可能與parse_str()解析,但並非沒有一些轉換:

$str = '["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza'; 

parse_str(preg_replace('/(?<=^|&)/', 'x', str_replace('"', '', $str)), $a); 

var_dump($a['x']); 

它消除了雙引號,前綴與x每個條目,然後應用parse_str()。爲了得到什麼樣的preg_replace()做一個想法,所述中間結果是這樣的:

x[Day1][Morning]=mutton&x[Day1][Evening]=Juice&x[Day2][Morning]=burger&x[Day2][Evening]=pizza 

解析上面的字符串產生具有一個根元素x陣列。

+0

+1簡單易懂 – Nambi

+0

** + 1 **爲單行! –

+0

+1簡單解決方案:)但抱歉,我已經接受了答案 – Vishnu