返回的字符串看起来像来自数据库的数组 - PHP


Returned string that looks like an array from database - PHP

>数据库向我返回一个字符串,如下所示:

"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);