Marci-man
Marci-man

Reputation: 2233

PHP: Convert comma separated value pair string to 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.

Upvotes: 1

Views: 1449

Answers (2)

devpro
devpro

Reputation: 16117

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.

Upvotes: 1

Erik van de Ven
Erik van de Ven

Reputation: 4985

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

Upvotes: 3

Related Questions