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

时间:2015-01-21 14:29:11

标签: php arrays

数据库返回一个如下字符串:

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

将此转换为数组的最佳方法是什么,以便我可以轻松使用这些数据?

3 个答案:

答案 0 :(得分:1)

这似乎是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中,您将拥有一个包含此特定数据行的已解析数据的数组。

答案 1 :(得分:1)

我认为一种不错的方法是通过替换'=>'将该字符串转换为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')

答案 2 :(得分:0)

这是来自数据库的不受信任的数据,但是应该这样做:

eval("\$array = array($string);");
print_r($array);

你也可以尝试这个,但就像其他答案一样,它不适用于所有数据(如果它包含数据中的>,):

$string = str_replace(array(',','"','>'), array('&','',''), $string);
parse_str($string, $array);
print_r($array);