Sorry, hier steckt ein Bug:
array_walk($tmp, function (&$s) {
$s = trim($s, ''');
});
Muss wohl doch so:
~~~php
array_walk($tmp, function (&$s) {
$s = substr($s, 1, -1);
});
Der Grund ist, dass Einträge in $s mit einem escapten single quote enden könnten. Das würde trim() dann auch mit abschneiden.
Ist zwar sowieso keine vollständige Lösung, aber so ist es immerhin richtiger.