1

我正在尝试考虑最有效的方法来解析存储名称、学生 ID 和 Facebook ID 的文件。我正在尝试获取 fbid 值,因此对于此特定行,它将是:1281766051。我考虑过为此使用正则表达式,但是对于从哪里开始我有点迷茫。我曾想过将所有这些数据添加到一个数组中并切掉它,但这似乎效率低下。

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

如果帖子太简短,我深表歉意。我会尽力添加我可能错过的任何内容。谢谢。

4

3 回答 3

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 解析代码。

于 2012-10-24T22:36:27.197 回答
0

那是 JSON,使用:

$str = '{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}';
$data = json_decode($str);

echo $data->fbid;

干杯

于 2012-10-24T22:34:32.853 回答
0

使用json_decode

$txt='{"name":"John Smith","studentid":"10358595","fbid":"1284556651"}';
$student =json_decode($txt);
echo $student->fbid;
于 2012-10-24T22:36:01.807 回答