>数据库向我返回一个字符串,如下所示:
"date_approved"=>"2015-01-01T10:19:44+00:00", "date_realized"=>"2015-01-01T10:31:11+00:00", "date_tn_approved"=>"2015-01-01T10:09:40+00:00"
将其转换为数组以便我可以轻松使用这些数据的最佳方法是什么?
我认为一个不错的方法是将该字符串转换为 JSON 格式字符串,方法是将"=>"替换为":",然后应用 json_decode()。
$str = '"date_approved"=>"2015-01-01T10:19:44+00:00", "date_realized"=>"2015-01-01T10:31:11+00:00", "date_tn_approved"=>"2015-01-01T10:09:40+00:00"';
$str = '{'. str_replace('=>', ':', $str). '}';
$arr = json_decode($str, true);
// Test
var_export($arr);
//array ('date_approved'=>'2015-01-01T10:19:44+00:00', 'date_realized'=>'2015-01-01T10:31:11+00:00', 'date_tn_approved'=>'2015-01-01T10:09:40+00:00')
这似乎是var_export
函数的输出。相反的是eval
,但在安全性方面它被认为是一种不好的做法,因此您可以尝试:
$data = '"date_approved"=>"2015-01-01T10:19:44+00:00", "date_realized"=>"2015-01-01T10:31:11+00:00", "date_tn_approved"=>"2015-01-01T10:09:40+00:00"';
$result = array();
$items = explode(',', $data);
foreach($items as $item) {
$item_data = explode('=>', $item);
$result[trim($item_data[0], '"')] = trim($item_data[1], '"');
}
最后,在$result
中,您将拥有一个数组,其中包含此特定数据行的解析数据。
这是来自数据库的不受信任的数据,但这应该可以做到:
eval("'$array = array($string);");
print_r($array);
您也可以尝试这样做,但就像其他答案一样,它不适用于所有数据(如果它包含数据中的>"):
$string = str_replace(array(',','"','>'), array('&','',''), $string);
parse_str($string, $array);
print_r($array);