2010-11-24 42 views
5

現在,我得到一個數組的字符串,像這樣:字符串「陣列」,以真正的數組

$str = "array('a'=>1, 'b'=>2)"; 

我如何轉換這個字符串變成真正的數組?有沒有什麼「聰明的方式」來做到這一點,其他使用explode()?因爲「string」數組在一段時間內可能會非常複雜。

謝謝!

回答

5

我不知道這樣做的好方法(只有邪惡eval()至極realy should be avoided)。

但是:您從哪裏得到該字符串?這是你可以影響的東西嗎?如果是這樣,使用serialize()/unserialize()將是一個更好的方法。

5

使用php的「eval」函數。

eval("\$myarray = $str;"); 
+0

像別人說的,小心! Eval將執行一切(想象一下黑客所提出的mysql查詢)。除非您創建了字符串(並確保它已被「消毒」),否則請勿使用eval。 – 2010-11-24 12:13:05

1

您必須使用eval()

獲得不需要eval()解碼的數組的文本表示的更好方式是使用json_encode()/json_decode()

1

如果您可以信任該字符串,請使用eval。我不記得確切的語法,但這應該工作。

$arr = eval($array_string); 

如果該字符串是由用戶輸入或從其他不受信任的來源給出的,你應該避免的eval()在任何情況下

要將字符串存儲在數組中,您應該查看serializeunserialize

1

您可以將字符串寫入文件,將字符串封裝在文件中的函數定義中,併爲該文件指定一個.php擴展名。

然後,您將PHP文件包含在當前模塊中,並調用將返回數組的函數。

0

不要使用eval()在任何情況下 就叫strtoarray($str, 'keys')爲數組鍵和strtoarray($str)數組它們沒有鑰匙。

function strtoarray($a, $t = ''){ 
    $arr = []; 
    $a = ltrim($a, '['); 
    $a = ltrim($a, 'array('); 
    $a = rtrim($a, ']'); 
    $a = rtrim($a, ')'); 
    $tmpArr = explode(",", $a); 
    foreach ($tmpArr as $v) { 
     if($t == 'keys'){ 
      $tmp = explode("=>", $v); 
      $k = $tmp[0]; $nv = $tmp[1]; 
      $k = trim(trim($k), "'"); 
      $k = trim(trim($k), '"'); 
      $nv = trim(trim($nv), "'"); 
      $nv = trim(trim($nv), '"'); 
      $arr[$k] = $nv; 
     } else { 
      $v = trim(trim($v), "'"); 
      $v = trim(trim($v), '"'); 
      $arr[] = $v; 
     } 
    } 
    return $arr; 
}