2014-02-18 21 views
0

我有這個字符串將字符串內容轉換成數組的PHP

string(2091) " 


"roots" => array(
    array(
     "driver"  => "LocalFileSystem", // driver for accessing file system (REQUIRED) 
     "path"   => "../files/",   // path to files (REQUIRED) 
     //"URL"   => dirname($_SERVER["PHP_SELF"]) . "/../files/", // URL to files (REQUIRED) 
     "accessControl" => "access" ,   // disable and hide dot starting files (OPTIONAL) 
     "alias" => "Root", 
     //"uploadDeny" => array("all"), 
     "attributes" => array(
    array(
     "pattern" => "/\manuali$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => false, 
     "locked" => true, 
    ), 
    array(
     "pattern" => "/rapporti$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => true, 
     "locked" => true, 
    ) 
    [...] 
    "; 

我想放入數組字符串的全部價值。例如:

array(


"roots" => array(
    array(
     "driver"  => "LocalFileSystem", // driver for accessing file system (REQUIRED) 
     "path"   => "../files/",   // path to files (REQUIRED) 
     //"URL"   => dirname($_SERVER["PHP_SELF"]) . "/../files/", // URL to files (REQUIRED) 
     "accessControl" => "access" ,   // disable and hide dot starting files (OPTIONAL) 
     "alias" => "Root", 
     //"uploadDeny" => array("all"), 
     "attributes" => array(
    array(
     "pattern" => "/\manuali$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => false, 
     "locked" => true, 
    ), 
    array(
     "pattern" => "/rapporti$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => true, 
     "locked" => true, 
    ) 
    [...] 
    ); 

我已經試過str_split() implode() array_push() ......但每一個函數把字符串到數組在這種模式下array(string(" "))我希望把這個模式array(" ")

謝謝

+1

什麼是生產該字符串的第一個地方?你不能只是序列化它,而不是將它打印爲字符串,然後試圖將字符串解析回覆雜的結構 – Anigel

+0

字符串是從文件前讀取的。 $ XX =的file_get_contents( 'out.txt'); – napster3world

+1

問題仍然是該文件中生成該字符串的原因。對於該文件而言,只包含序列化結構而不是字符串會更有意義。 – Anigel

回答

1

如果你的字符串是可解析的,你不介意可能的注射,你可以簡單地eval你的數組表示。

例如,如果你的字符串是$arrayStr,你想從創建數組$myArray

$arrayStr = '"roots" => array (...)'; 
eval('$myArray = array(' . $arrayStr . ');'); 

注意,如果$arrayStr是不是一代的轉換完全控制,這是高度風險因爲任何東西都會被評估。

一個更好的解決方案來交換你的應用程序的各個部分之間的整個數組應該是serialize()它事先創建一個可以存儲的數組/對象的字符串表示,然後在需要它的原始形式時將其反序列化。

+0

你能解釋我是如何工作的(在這種情況下)serialize()函數? – napster3world

+0

沒有抱歉,你已經解決了我的問題...謝謝! – napster3world

1

有兩種主要方法我可以想到。

一,使用preg_match某種形式的複雜模式匹配循環。您可以使用explode\n將字符串拆分爲每行,將其轉換爲數組(每行),遍歷每行,並使用模式匹配(正則表達式)找出如何處理它。

第二種方法是令人難以置信的危險,所以我強烈建議你不要使用它,但PHP有它自己的eval函數,它可以讓PHP將字符串解釋爲實際的PHP。

您需要在字符串內附加一個變量賦值,例如

$arrayString = "$var = array(' . $arrayString . ');"; 

然後

eval($arrayString); 

但是,你真的不,如果你能想要做這個。從PHP文檔:

注意

中的eval()語言結構是非常危險的,因爲它允許 執行任意PHP代碼。因此不鼓勵它的使用。如果您 已仔細驗證除了使用此構造外沒有其他選擇,請特別注意不要將任何用戶提供的數據 加入其中,而不事先對其進行正確驗證。

+0

您的解決方案生成string()= array(..與其他函數相同,這是我的問題.. eval不能正常工作..但非常感謝你! – napster3world