Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正试图在php中将字符串转换为数组,因为我有下面给出的字符串_Php - Fatal编程技术网

我正试图在php中将字符串转换为数组,因为我有下面给出的字符串

我正试图在php中将字符串转换为数组,因为我有下面给出的字符串,php,Php,我曾尝试过爆炸函数,但它并没有给出我想要的输出 以下是我的代码和说明: { refresh_token: "xxxx", access_token: "xxxx", expires_in: 21600, } 我将此值作为字符串,并希望将此刷新标记转换为数组中的键,将“xxxx”转换为数组中的值 我曾尝试使用explode函数,但它提供了新的键,如[0]=>“刷新令牌”。explode()不适合此工作。使用该字符串格式,您将需要编写一个自定义函数。假设

我曾尝试过爆炸函数,但它并没有给出我想要的输出

以下是我的代码和说明:

    {
    refresh_token: "xxxx",

    access_token: "xxxx",

    expires_in: 21600,
    }
我将此值作为字符串,并希望将此刷新标记转换为数组中的键,将“xxxx”转换为数组中的值

我曾尝试使用explode函数,但它提供了新的键,如[0]=>“刷新令牌”。

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
)
*/

根据您的实际数据,这种方法可能会遇到问题。您的源字符串实际上非常接近常规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
)
*/

因此,如果您可以调整字符串的源代码,以生成有效的JSON而不是此自定义字符串,您的生活将突然变得轻松得多。

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
)
*/

根据您的实际数据,这种方法可能会遇到问题。您的源字符串实际上非常接近常规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
)
*/


因此,如果您可以调整字符串的源代码,以生成有效的JSON而不是此自定义字符串,您的生活将突然变得轻松多了。

您可以使用PHP JSON_decode函数,因为它是JSON字符串格式。 例如:
$encodedJson=json\u decode('{
刷新\u令牌:“xxxx”,
访问令牌:“xxxx”,
地址:21600,
}');
$encodedJson->访问令牌

将为您提供xxxx值

您可以使用PHP json_解码函数,因为它是json字符串格式。 例如:
$encodedJson=json\u decode('{
刷新\u令牌:“xxxx”,
访问令牌:“xxxx”,
地址:21600,
}');
$encodedJson->访问令牌

将为您提供xxxx值

使用str_split();这应该行得通

使用str_split();如果可能的话,在其他洁洁的PHP json中,这应该可以使用无引号的键,您应该将这些键用引号括起来,然后您可以将其转换为数组:

$x=(数组)json_解码('{
“刷新令牌”:“xxxx”,
“访问令牌”:“xxxx”,
“到期日”:21600,
}' );

如果这在代码的更高层是不可能的,您可以使用一些字符串黑客来共同接收它:
$x=(数组)json_解码(str_替换(['',',',','{','}'],['','','','','','','','{','''}'],
“{刷新令牌:“xxxx”,访问令牌:“xxxx”,过期时间:21600}”)

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

未加引号的键,如果可能的话,您应该将它们用引号括起来,然后您可以将其转换为数组:

$x=(数组)json_解码('{
“刷新令牌”:“xxxx”,
“访问令牌”:“xxxx”,
“到期日”:21600,
}' );

如果这在代码的更高层是不可能的,您可以使用一些字符串黑客来共同接收它:
$x=(数组)json_解码(str_替换(['',',',','{','}'],['','','','','','','','{','''}'],
“{刷新令牌:“xxxx”,访问令牌:“xxxx”,过期时间:21600}”)

我实际上没有检查此代码 另外,这很难看,只需使用函数,但请记住检查字符串的有效性,例如,在字符串中应删除最后一个逗号,键应用双引号括起来

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


非常确定PHP在解析json时需要在键周围加双引号,如果没有,这是可信的响应。非常确定PHP在解析json时需要在键周围加双引号,如果没有,这是可信的响应。