php将带有新行的字符串转换为数组?

时间:2011-04-04 20:06:06

标签: php

我从API获取数据,结果字符串是

[RESPONSE]
PROPERTY[STATUS][0]=ACTIVE
PROPERTY[REGISTRATIONEXPIRATIONDATE][0]=2012-04-04 19:48:48
DESCRIPTION=Command completed successfully
QUEUETIME=0
CODE=200
RUNTIME=0.352

QUEUETIME=0
RUNTIME=0.8

EOF

我正在尝试将其转换为类似

的数组
Array(
['PROPERTY[STATUS][0]'] => ACTIVE,
['CODE'] => 200,
...
);

所以我试图使用生成的file_get_content函数将其爆炸,像

一样爆炸
$output = explode('=',file_get_contents($url));

但问题是返回的值并不总是以相同的顺序返回,所以我需要像$array['CODE'] = 200$array['RUNTIME'] = 0.352一样,但似乎没有任何新行字符?我在爆炸功能中尝试\r\n, \n, <br>, \r\n\r\n无济于事。但是在记事本和浏览器中都有新行。

所以我的问题是有一些方法来确定字符串是否在新行上或确定强制新行的字符是什么?如果不是,还有其他方法可以将其读入数组吗?

5 个答案:

答案 0 :(得分:1)

使用双引号在"\n"上进行爆炸,以便PHP理解这是换行符而不是反向换行n ;-)然后在=上展开每个项目

答案 1 :(得分:1)

为什么不使用parse_ini_file()parse_ini_string()

它应该只需一个简单的步骤即可完成所需的一切(构建数组)。

答案 2 :(得分:1)

要找出破坏字符是什么,你可以这样做(如果$data描述你发布的字符串示例):

echo ord($data[strlen('[RESPONSE]')]) . PHP_EOL;
echo ord($data[strlen('[RESPONSE]')+1]);          // if there's a second char

然后查看ASCII table以查看它是什么。

编辑:然后你可以使用新发现的角色爆炸数据:

explode(ord($ascii_value), $data);

顺便说一下,file()会返回正确的数组吗?

答案 3 :(得分:0)

尝试

preg_split("/$/m", $str)

preg_split("/$\n?/m", $str)

用于拆分

答案 4 :(得分:0)

懒惰的解决方案是:

$response = strtr($response, "\r", "\n");
preg_match_all('#^(.+)=(.+)\s*$#m', $response, $parts);
$parts = array_combine($parts[1], $parts[2]);

给你:

Array (
 [PROPERTY[STATUS][0]] => ACTIVE
 [PROPERTY[REGISTRATIONEXPIRATIONDATE][0]] => 2012-04-04 19:48:48
 [DESCRIPTION] => Command completed successfully
 [QUEUETIME] => 0
 [CODE] => 200
 [RUNTIME] => 0.8