Secondo me invece di
$data = array_shift($data);

dopo l'explode conviene usare
$data[0]

si usa direttamente il dato risparmiando una chiamata ad una funzione che costa tempo e risorse... ok , una quantità irrisoria, ma se se ne può fare a meno perché non farlo?