从这个特定文件中获取数据的最有效方法是什么?

时间:2012-10-24 22:31:18

标签: php regex

我正在考虑解析存储名称,学生资格和Facebook ID的文件的最有效方法。我正在尝试获取fbid值,所以对于这个特定的行,它将是:1281766051。我考虑过使用正则表达式,但我有点迷失 start 的位置。我想把所有这些数据添加到一个数组并切断它,但它似乎效率低下。

{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}

如果帖子过于简短,我道歉。我会尽我所能添加任何我可能错过的东西。感谢。

3 个答案:

答案 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)

使用json_decode

$txt='{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}';
$student =json_decode($txt);
echo $student->fbid;