我正在尝试将字符串转换为php中的数组,因为我有如下所示的字符串

时间:2018-07-07 10:48:11

标签: php

我尝试过爆炸功能,但没有给出我想要的输出。

这是我的代码和说明:

    {
    refresh_token: "xxxx",

    access_token: "xxxx",

    expires_in: 21600,
    }

我将此值作为字符串,我想将此refresh_token转换为数组中的键,并将“ xxxx”转换为数组中的值。

我曾尝试过使用爆炸功能,但是它提供了新的键,例如[0] =>“ refresh_token”。

5 个答案:

答案 0 :(得分:2)

explode()不适合该工作。使用该字符串格式,您将需要编写一个自定义函数。假设这些值不包含逗号,并且对象中的最后一个值与其他值一样总是以逗号结尾,则可以这样做:

function parse_value_string($string) {
    preg_match_all('/([a-z_]+):\s+(.*),/', $string, $matches);

    return array_combine($matches[1], array_map(function($val) {
        return trim($val, '"');
    }, $matches[2]));
}

$test = '{
    refresh_token: "xxxx",

    access_token: "xxxx",

    expires_in: 21600,
}';

$values = parse_value_string($test);

print_r($values);
/*
Array
(
    [refresh_token] => xxxx
    [access_token] => xxxx
    [expires_in] => 21600
)
*/

Demo

根据您的实际数据,您可能会遇到这种方法的问题。您的源字符串实际上确实接近常规JSON。如果将逗号放在最后一个值之后,并将数据键括在引号中,则可以使用PHP的本机JSON支持来解析它:

$test = '{
    "refresh_token": "xxxx",

    "access_token": "xxxx",

    "expires_in": 21600
}';

$values = json_decode($test, true);

print_r($values);
/*
Array
(
    [refresh_token] => xxxx
    [access_token] => xxxx
    [expires_in] => 21600
)
*/

Demo

因此,如果您可以调整字符串源以生成有效的JSON(而不是此自定义字符串),您的生活就会突然变得更加轻松。

答案 1 :(得分:2)

您可以使用PHP json_decode函数,因为它是JSON字符串格式。 例如 : $encodedJson = json_decode('{ refresh_token: "xxxx", access_token: "xxxx", expires_in: 21600, }'); $encodedJson->access_token 将为您提供xxxx值

答案 2 :(得分:2)

使用str_split();应该起作用

答案 3 :(得分:1)

否则为kosher-PHP json中未加引号的键,您应该尽可能将它们用引号引起来,然后可以将其转换为数组: $x = (array) json_decode ( '{ "refresh_token": "xxxx", "access_token": "xxxx", "expires_in": 21600, }' );

如果在代码中不可能做到这一点,则可以使用一些字符串黑客来强制执行: $x = (array) json_decode( str_replace( [ ' ' , ':' , ',' , '{' , '}' ], [ '', '":', ',"' , '{"' , '"}' ],
'{refresh_token:"xxxx",access_token: "xxxx",expires_in: 21600}' ) );

我实际上没有检查此代码 此外,这是丑陋的AF

答案 4 :(得分:0)

只需使用json_decode函数,但要记住检查字符串的有效性,例如,在字符串中,最后一个逗号应删除,并且键应用双引号引起来。

enter image description here