現在,我得到一個數組的字符串,像這樣:字符串「陣列」,以真正的數組
$str = "array('a'=>1, 'b'=>2)";
我如何轉換這個字符串變成真正的數組?有沒有什麼「聰明的方式」來做到這一點,其他使用explode()?因爲「string」數組在一段時間內可能會非常複雜。
謝謝!
現在,我得到一個數組的字符串,像這樣:字符串「陣列」,以真正的數組
$str = "array('a'=>1, 'b'=>2)";
我如何轉換這個字符串變成真正的數組?有沒有什麼「聰明的方式」來做到這一點,其他使用explode()?因爲「string」數組在一段時間內可能會非常複雜。
謝謝!
我不知道這樣做的好方法(只有邪惡eval()
至極realy should be avoided)。
但是:您從哪裏得到該字符串?這是你可以影響的東西嗎?如果是這樣,使用serialize()
/unserialize()
將是一個更好的方法。
使用php的「eval」函數。
eval("\$myarray = $str;");
您必須使用eval()
。
獲得不需要eval()
解碼的數組的文本表示的更好方式是使用json_encode()
/json_decode()
。
如果您可以信任該字符串,請使用eval。我不記得確切的語法,但這應該工作。
$arr = eval($array_string);
如果該字符串是由用戶輸入或從其他不受信任的來源給出的,你應該避免的eval()在任何情況下!
要將字符串存儲在數組中,您應該查看serialize和unserialize。
您可以將字符串寫入文件,將字符串封裝在文件中的函數定義中,併爲該文件指定一個.php擴展名。
然後,您將PHP文件包含在當前模塊中,並調用將返回數組的函數。
不要使用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;
}
像別人說的,小心! Eval將執行一切(想象一下黑客所提出的mysql查詢)。除非您創建了字符串(並確保它已被「消毒」),否則請勿使用eval。 – 2010-11-24 12:13:05