PHP: преобразовать строку пары значений, разделенных запятыми, в массив

У меня есть пары разделенных запятыми значений, и я хотел бы преобразовать их в ассоциативный массив в php.

Пример:

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

Конвертировано в:

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

Имеет ли значение то, что мои ценности не находятся в кавычках? Я имею в виду: Вес: 80 Vs Вес: '80 '

PS Я выложил сообщение с телефона, поэтому у меня нет много привлекательной разметки, чтобы этот вопрос выглядел более презентабельно.

http://php.net/manual/en/function.json-decode.php Это объект JSON, который вы хотите преобразовать в массив.

 $string = '{ "Age":30, "Weight":80, "Height":180 }'; $array = json_decode($string, true); echo $array['Age']; // returns 30 

При условии, что данная строка является допустимым JSON.

ОБНОВИТЬ

Если это не работает, потому что строка не содержит допустимого объекта JSON (потому что я вижу, что в ключах отсутствуют двойные кавычки), вы можете выполнить эту функцию регулярного выражения:

 $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 

При использовании регулярного выражения выше, убедитесь, что строка не содержит кавычек вообще. Поэтому убедитесь, что некоторые ключи не имеют котировок, а некоторые нет. Если это так, сначала избавьте все кавычки перед выполнением регулярного выражения:

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

Вы можете получить все значения в массиве, используя этот базовый пример:

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

Результат:

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

Объяснение:

  1. (?<=}) заглядывают за утверждениями.
  2. K[^{] соответствует открывающим скобкам, а K сообщает, что соответствовало.