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

时间:2016-01-16 18:10:21

标签: php

我有逗号分隔的值对,我想将其转换为php中的关联数组。

示例:

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

转换为:

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

我的值不是用引号括起来的吗?我的意思是: 体重:80 VS 重量:' 80'

P.S。我已经通过手机发帖了,所以我没有很多花哨的标记可以让这个问题看起来更具代表性。

2 个答案:

答案 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
)

<强>解释

  1. (?<=})看看断言。
  2. K[^{]匹配开头大括号,K代表匹配的内容。