将字符串内的对象转换为数组

时间:2019-06-18 07:58:27

标签: php

我从url值中得到了类似以下内容:

$param = "{year:2019,month:5,id:3}"

我无法将其转换为数组。

有人可以帮我吗

3 个答案:

答案 0 :(得分:2)

我认为需要手动解析。

首先在没有{}的情况下用逗号爆炸以分隔每个键值对,然后循环并再次爆炸以将键与值分开。

$param = explode(",", substr($param, 1, -1));

foreach($param as $v){
    $temp = explode(":", $v);
    $res[$temp[0]] = $temp[1];
}

var_dump($res);

/*
array(3) {
  ["year"]=>
  string(4) "2019"
  ["month"]=>
  string(1) "5"
  ["id"]=>
  string(1) "3"
}*/

https://3v4l.org/naIJE

答案 1 :(得分:2)

每当您拥有这样的字符串时,由于包含不期望的值(例如逗号或冒号),值可能会引起问题。因此,为了增加混乱,并且因为这只是一个有趣的实验,我想到了将字符串转换为URL编码的字符串(使用&和=)然后将其解析为参数字符串的想法。

parse_str(strtr($param, ["{" => "", "}" => "", ":" => "=", "," => "&"]), $params);

$params数组指定为...

Array
(
    [year] => 2019
    [month] => 5
    [id] => 3
)

答案 2 :(得分:0)

您的json格式不正确。试试这个:

$param = '{"year":2019,"month":5,"id":3}';
var_dump(json_decode($param, true));