我正在考虑解析存储名称,学生资格和Facebook ID的文件的最有效方法。我正在尝试获取fbid值,所以对于这个特定的行,它将是:1281766051。我考虑过使用正则表达式,但我有点迷失 start 的位置。我想把所有这些数据添加到一个数组并切断它,但它似乎效率低下。
{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}
如果帖子过于简短,我道歉。我会尽我所能添加任何我可能错过的东西。感谢。
答案 0 :(得分:3)
嗯,这似乎是JSON,所以正确的方法是
$json = json_decode($str);
$id = $json->fbid;
正则表达式解决方案如下所示:
preg_match('/"fbid":"(\d+)"/', $str, $matches);
$id = $matches[1];
但是我不能告诉你哪个更有效率。您必须对其进行分析。
<强>更新强>
我对执行时间进行了非常基本的检查(没有太可靠,我只测量了两个代码的1,000,000次执行)。对于您的特定输入,差异可以忽略不计:
json_decode: 27s
preg_match: 24s
但是,如果您的JSON记录变大(例如,如果我在字符串的开头添加3个字段(以便两个解决方案都受到影响)),差异就会变得非常明显:
json_decode: 46s
preg_match: 30s
现在,如果我将三个字段添加到字符串的末尾,则差异会变得更大(显然,因为preg_match
在匹配后不关心任何事情):
json_decode: 45s
preg_match: 24s
即便如此,在应用这样的优化之前,请对应用程序进行适当的分析,并确保这确实是一个至关重要的瓶颈。如果不是,则不值得使用正则表达式函数来模糊JSON解析代码。
答案 1 :(得分:0)
那个JSON,使用:
$str = '{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}';
$data = json_decode($str);
echo $data->fbid;
干杯
答案 2 :(得分:0)
$txt='{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}';
$student =json_decode($txt);
echo $student->fbid;