我正在使用api从另一台服务器检索数据,返回的数据是这样的:
accountid=10110 type=prem servertime=1263752255 validuntil=1266163393
username= curfiles=11 curspace=188374868 bodkb=5000000 premkbleft=24875313
这是一个完整的字符串我需要整个字符串中的两个值,我目前正在使用preg_match来获取它,但只是为了了解更多并改进我的编码是否有任何其他方式或函数,其中所有值都自动转换为阵列
谢谢。
答案 0 :(得分:1)
Sooo,我的快于 - preg_split
基于strpos的函数如下所示:
function unpack_server_data($serverData)
{
$output = array();
$keyStart = 0;
$keepParsing = true;
do
{
$keyEnd = strpos($serverData, '=', $keyStart);
$valueStart = $keyEnd + 1;
$valueEnd = strpos($serverData, ' ', $valueStart);
if($valueEnd === false)
{
$valueEnd = strlen($serverData);
$keepParsing = false;
}
$key = substr($serverData, $keyStart, $keyEnd - $keyStart);
$value = substr($serverData, $valueStart, $valueEnd - $valueStart);
$output[$key] = $value;
$keyStart = $valueEnd + 1;
}
while($keepParsing);
return $output;
}
它查找一个等号字符,然后查找一个空格字符,并使用这两个来决定一个键名开始的位置,以及一个值名称何时开始。
答案 1 :(得分:0)
尝试parse_str或许你需要在
之前做str_replace(' ', '&', $string);
答案 2 :(得分:0)
无论如何,使用爆炸是最快的。
但是,要回答你的问题,你可以通过多种方式做到这一点。但仅仅因为你可以,并不意味着你应该。但如果你真的想让它变得怪异,试试这个。
使用strpos更新
$arr = array();
$begin = 0;
$str = trim($str); # remove leading and trailing whitespace
while ($end = strpos($str, ' ', $begin)) {
$split = strpos($str, '=', $begin);
if ($split > $end) break;
$arr[substr($str, $begin, $split-$begin)] = substr($str, $split+1, $end-$split-1);
$begin = $end+1;
}