/** * Parse an array of key-value pairs and return an array of specified * parameters. * * @param array An array of parameters. * @param string A parameter identifer. * * @return string A string representation of an array of initialization * parameters, if any parameters exists, otherwise the string * form of null. * * @author Sean Kerr (skerr@mojavi.org) * @since 3.0.0 */ public static function &parse(&$array, $identifer = 'param') { $parameters = array(); // get the identifer length $identifer = $identifer . '.'; $length = strlen($identifer); foreach ($array as $key => &$value) { if (strlen($key) > $length && substr($key, 0, $length) == $identifer) { // literalize our value $value = ConfigHandler::literalize($value); // we found a parameter, let's add this baby to our list $parameter = substr($key, $length); if (preg_match('/\\.[0-9]+$/', $parameter)) { // we have an array of parameter values, get the actual // parameter name preg_match('/(.*?)\\.[0-9]+$/', $parameter, $match); $parameter = $match[1]; if (!isset($parameters[$parameter])) { // create our parameter's sub-array $parameters[$parameter] = array(); } // add our parameter to the array $parameters[$parameter][] =& $value; } else { // just a boring 'ol string value $parameters[$parameter] =& $value; } } } if (count($parameters) == 0) { // no parameters $retval = 'null'; return $retval; } // init our return value $retval = array(); // loop through the parameters list foreach ($parameters as $parameter => &$value) { if (is_array($value)) { // we have an array value $tmp = "'%s' => array(%s)"; $retval[] = sprintf($tmp, $parameter, implode(', ', $value)); } else { // we have a normal value $tmp = "'%s' => %s"; $retval[] = sprintf($tmp, $parameter, $value); } } // complete the return value $tmp = 'array(%s)'; $retval = sprintf($tmp, implode(', ', $retval)); return $retval; }