public static function flattenList($a)
    {
        if (!isList($a)) {
            return $a;
        }

        do {
            $flatten = false;
            for ($i = 0, $l = sizeof($a); $i < $l; $i++) {
                if (isList($a[$i])) {
                    $flatten = true;
                    break;
                }
            }
            if (!$flatten) {
                break;
            }
            $res = [];
            for ($i = 0; $i < $l; $i++) {
                if (!isList($a[$i])) {
                    // filter empty arrays inside
                    if (!(is_array($a[$i]) && empty($a[$i]))) {
                        $res[] = $a[$i];
                    }
                } else {
                    $res = array_merge($res, (array)$a[$i]);
                }
            }
            $a = $res;
        } while ($flatten);

        return $a;
    }