У меня есть пары разделенных запятыми значений, и я хотел бы преобразовать их в ассоциативный массив в 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 )
Объяснение:
(?<=})
заглядывают за утверждениями. K[^{]
соответствует открывающим скобкам, а K сообщает, что соответствовало.