/** * Explodes a string as explode() does, however, not if $sep is escaped or within a string. * * @since 1.0.0 * * @param string $sep Separator. * @param string $string String. * @return array */ public function explode_ws($sep, $string) { $status = 'st'; $to = ''; $output = array(); $num = 0; for ($i = 0, $len = strlen($string); $i < $len; $i++) { switch ($status) { case 'st': if ($string[$i] === $sep && !$this->parser->escaped($string, $i)) { ++$num; } elseif ('"' === $string[$i] || "'" === $string[$i] || '(' === $string[$i] && !$this->parser->escaped($string, $i)) { $status = 'str'; $to = '(' === $string[$i] ? ')' : $string[$i]; isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]); } else { isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]); } break; case 'str': if ($string[$i] === $to && !$this->parser->escaped($string, $i)) { $status = 'st'; } isset($output[$num]) ? $output[$num] .= $string[$i] : ($output[$num] = $string[$i]); break; } } if (isset($output[0])) { return $output; } else { return array($output); } }