我有逗号分隔的值对,我想将其转换为php中的关联数组。
示例:
{
Age:30,
Weight:80,
Height:180
}
转换为:
Echo $obj['Weight']; // 80
我的值不是用引号括起来的吗?我的意思是: 体重:80 VS 重量:' 80'
P.S。我已经通过手机发帖了,所以我没有很多花哨的标记可以让这个问题看起来更具代表性。
答案 0 :(得分:3)
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);
答案 1 :(得分:1)
您可以使用以下基本示例获取数组中的所有值:
// 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代表匹配的内容。