Hi, I'm the author of the decoder PHP class. To an earlier poster - yes, this will only help with Articulate Storyline created SCORM/xAPI modules. They have another product that I'll be testing against in the near future, but as of now I can only confirm Articulate Storyline compatibility.
Looking over analytics, I found this forum thread. I think it's super cool that my code is helping some people.
I recently updated it because my customer provided me with another version of output that I didn't previously cover. My testing confirms it works with both versions of SCORM, and xAPI.
There is a bit that your post didn't cover, and that's slide uniqueness. It decodes viewed slides, but if a user backtracks you may end up with a wrong slide count unless you perform an array_unique on the output. If you fully translate, it will do this for you, but that isn't always necessary and you can save some processor cycles if you just array_unique the output of the slides method.
Anyway, I'm glad to see that it's helping. Articulate has been less than cooperative regarding the data format. People have been asking for a way to decode it for 4+ years and they decline every time. The storage method sucks! It's terribly inefficient.