我正试图在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时需要在键周围加双引号,如果没有,这是可信的响应。