public static function _build_list($list, $separator = ',')
{
if (is_object($list)) {
$list = $list->value;
}
if (is_array($list)) {
$newlist = array();
foreach ($list as $listlet) {
list($newlist, $separator) = array_merge($newlist, self::_parse_list($listlet, $separator, false));
}
$list = implode(', ', $newlist);
}
$out = array();
$size = 0;
$braces = 0;
$quotes = false;
$stack = '';
$listCount = strlen($list);
for ($i = 0; $i < $listCount; $i++) {
$char = substr($list, $i, 1);
switch ($char) {
case '"':
case "'":
if (!$quotes) {
$quotes = $char;
} elseif ($quotes && $quotes == $char) {
$quotes = false;
}
$stack .= $char;
break;
case '(':
$braces++;
$stack .= $char;
break;
case ')':
$braces--;
$stack .= $char;
break;
case $separator:
if ($braces === 0 && !$quotes) {
$out[] = $stack;
$stack = '';
$size++;
break;
}
default:
$stack .= $char;
}
}
if (strlen($stack)) {
if (($braces || $quotes) && count($out)) {
$out[count($out) - 1] .= $stack;
} else {
$out[] = $stack;
}
}
foreach ($out as $k => $v) {
$out[$k] = trim($v, ', ');
}
return $out;
}