PHP:将逗号分隔值对字符串转换为Array

I have comma separated value pairs and I would like to convert it to associative array in php.

Example:

{ 
   Age:30,
   Weight:80,
   Height:180
}

Converted to:

Echo $obj['Weight']; // 80

Does it make a difference that my values are not in inverted commas? I mean: Weight:80 Vs Weight:'80'

P.S. I've posted from a phone, so I don't have a lot of fancy markup available to make this question look more presentable.

http://php.net/manual/en/function.json-decode.php It's an JSON object which you would like to convert to an array.

$string = '{ "Age":30, "Weight":80, "Height":180 }';

$array = json_decode($string, true);
echo $array['Age']; // returns 30

Provided that the given string is a valid JSON.

UPDATE

If that doesn't work because the string doesn't contain a valid JSON object (because I see the keys are missing double quotes), you could execute this regex function first:

$string = "{ Age:30, Weight:80, Height:180 }";
$json = preg_replace('/(?<!")(?<!\w)(\w+)(?!")(?!\w)/u', '"$1"', $string); // fix missing quotes

$obj = json_decode($json, true);
echo $obj['Age']; // returns 30

When using the regex above, make sure the string doesn't contain any quotes at all. So make sure that not some keys have quotes and some not. If so, first get rid of all quotes before executing the regex:

str_replace('"', "", $string);
str_replace("'", "", $string);

You can get all values in an array by using this basic example:

// your string
$string = "{ 
   Age:30,
   Weight:80,
   Height:180
}";

// preg_match inside the {}
preg_match('/\K[^{]*(?=})/', $string, $matches);

$matchedResult = $matches[0];
$exploded = explode(",",$matchedResult); // explode with ,

$yourData = array();
foreach ($exploded as $value) {
    $result = explode(':',$value); // explode with :
    $yourData[$result[0]] = $result[1];
}

echo "<pre>";
print_r($yourData);

Result:

Array
(
    [Age] => 30
    [Weight] => 80
    [Height] => 180
)

Explanation:

  1. (?<=}) look behind asserts.
  2. K[^{] matches the opening braces and K tells what was matched.