1

名前、学生ID、FacebookIDを格納するファイルを解析する最も効率的な方法を考えようとしています。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

ここで、文字列の最後に3つのフィールドを追加すると、差はさらに大きくなります(明らかに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 に答える