explode()
is not suited for this job. With that string format, you will need to write a custom function. Assuming the values do not contain commas and the last value in your object always ends with a comma just like the others, something like this will do:
function parse_value_string($string) {
preg_match_all('/([a-z_]+):\s+(.*),/', $string, $matches);
return array_combine($matches[1], array_map(function($val) {
return trim($val, '"');
}, $matches[2]));
}
$test = '{
refresh_token: "xxxx",
access_token: "xxxx",
expires_in: 21600,
}';
$values = parse_value_string($test);
print_r($values);
/*
Array
(
[refresh_token] => xxxx
[access_token] => xxxx
[expires_in] => 21600
)
*/
Demo
Depending on your actual data, you're probably going to run into issues with this approach. Your source string is actually really close to regular JSON. If you drop the comma after the last value and wrap your data keys in quotation marks, you can use PHP's native JSON support to parse it:
$test = '{
"refresh_token": "xxxx",
"access_token": "xxxx",
"expires_in": 21600
}';
$values = json_decode($test, true);
print_r($values);
/*
Array
(
[refresh_token] => xxxx
[access_token] => xxxx
[expires_in] => 21600
)
*/
Demo
So, if you can tweak the source of your string to generate valid JSON instead of this custom string, your life will suddenly become a whole lot easier.