私は現在、ゲーム情報をJSONで保存する比較的大きなログファイルを処理しようとしています。ログファイルの範囲は平均して2000〜5000行です。
ログファイルからの出力例(フォーマットを保持しています...)、注:彼自身のプライバシーのために、プレーヤー名、SteamID、およびIPアドレスを削除しました。
{"timestamp": "2012-09-16 14:10:36", "event": "log_start", "unixTime": 1347768636}
{"timestamp": "2012-09-16 14:10:36", "event": "player_status", "player": {"name": "PLAYER NICKNAME", "userId": 15, "uniqueId": "STEAM_X:X:XXXXXXX (STEAMID)", "team": 1}, "address": "xxx.xxx.xxx.xxx (IP)", "country": "AU"}
{"timestamp": "2012-09-16 14:10:36", "event": "live_on_3", "map": "de_mirage_csgo", "teams": [{"name": "Terrorists", "team": 2}, {"name": "Counter-Terrorists", "team": 3}], "status": 5, "version": "1.0.0 Beta"}
ここから問題が始まります。ログファイルの各行は、新しいJSONオブジェクトを効果的に定義しますか?私はこれらすべてのオブジェクトを1行ずつデコード(連想配列として保存)(json_decode($string,TRUE)
しようとしています。そこから、ループを介して1つのPHP配列にマージしようとしています。これは「機能」しますが(視覚的なエラーがないという意味で)、array_mergeは期待した結果に近いものを生成しません。これは私のコードです:
/* parse the logfile into array */
for ($i = 0; $i < $lineCount; $i++) {
if ($i === 0) { // first iteration
$arrLog = json_decode($line[$i],true);
} else {
$arrTempLog = json_decode($line[$i],true); // create temp array to store each line
$arrLog = array_merge($arrLog, $arrTempLog); // merge temp array w/ main array
}
}
私が必要なことを達成するための正しい方向に私を導くであろう提案やインプットは大歓迎です!
ありがとう