Revision: 65501
Updated Code
at December 9, 2013 06:02 by pachanka
Updated Code
<?php function parse_args($args) { $out = array(); $last_arg = null; if(is_string($args)){ $args = str_replace(array('=', "\'", '\"'), array('= ', ''', '"'), $args); $args = str_getcsv($args, ' ', '"'); $tmp = array(); foreach($args as $arg){ if(!empty($arg) && $arg != "'" && $arg != "=" && $arg != " "){ $tmp[] = str_replace(array('= ', ''', '"'), array('=', "'", '"'), trim($arg)); } } $args = $tmp; } for($i = 0, $il = sizeof($args); $i < $il; $i++){ if( (bool)preg_match("/^--(.+)/", $args[$i], $match) ){ $parts = explode("=", $match[1]); $key = preg_replace("/[^a-zA-Z0-9-]+/", "", $parts[0]); if(isset($args[$i+1]) && substr($args[$i],0,2) == '--'){ $out[$key] = $args[$i+1]; $i++; }else if(isset($parts[1])){ $out[$key] = $parts[1]; }else{ $out[$key] = true; } $last_arg = $key; }else if( (bool)preg_match("/^-([a-zA-Z0-9]+)/", $args[$i], $match) ){ $len = strlen($match[1]); for( $j = 0, $jl = $len; $j < $jl; $j++ ){ $key = $match[1]{$j}; $val = ($args[$i+1]) ? $args[$i+1]: true; $out[$key] = ($match[0]{$len} == $match[1]{$j}) ? $val : true; } $last_arg = $key; }else if((bool) preg_match("/^([a-zA-Z0-9-]+)$/", $args[$i], $match) ){ $key = $match[0]; $out[$key] = true; $last_arg = $key; }else if($last_arg !== null) { $out[$last_arg] = $args[$i]; } } return $out; } $str = 'yankee -D "oo\"d l e\'s" -went "2 town 2 buy him-self" -a pony --calledit=" \"macaroonis\' "'; var_dump(parse_args($str)); /* Will output: array(9) { ["yankee"]=> bool(true) ["D"]=> string(10) "oo"d l e's" ["w"]=> bool(true) ["e"]=> bool(true) ["n"]=> bool(true) ["t"]=> string(21) "2 town 2 buy him-self" ["a"]=> string(4) "pony" ["pony"]=> bool(true) ["calledit"]=> string(12) ""macaroonis'" } */
Revision: 65500
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 9, 2013 05:57 by pachanka
Initial Code
<?php function parse_args($args) { $out = array(); $last_arg = null; if(is_string($args)){ $args = str_replace(array('=', "\'", '\"'), array('= ', ''', '"'), $args); $args = str_getcsv($args, ' ', '"'); $tmp = array(); foreach($args as $arg){ if(!empty($arg) && $arg != "'" && $arg != "=" && $arg != " "){ $tmp[] = str_replace(array('= ', ''', '"'), array('=', "'", '"'), trim($arg)); } } $args = $tmp; } for($i = 0, $il = sizeof($args); $i < $il; $i++){ if( (bool)preg_match("/^--(.+)/", $args[$i], $match) ){ $parts = explode("=", $match[1]); $key = preg_replace("/[^a-zA-Z0-9-]+/", "", $parts[0]); if(isset($args[$i+1]) && substr($args[$i],0,2) == '--'){ $out[$key] = $args[$i+1]; $i++; }else if(isset($parts[1])){ $out[$key] = $parts[1]; }else{ $out[$key] = true; } $last_arg = $key; }else if( (bool)preg_match("/^-([a-zA-Z0-9]+)/", $args[$i], $match) ){ $len = strlen($match[1]); for( $j = 0, $jl = $len; $j < $jl; $j++ ){ $key = $match[1]{$j}; $val = ($args[$i+1]) ? $args[$i+1]: true; $out[$key] = ($match[0]{$len} == $match[1]{$j}) ? $val : true; } $last_arg = $key; }else if((bool) preg_match("/^([a-zA-Z0-9-]+)$/", $args[$i], $match) ){ $key = $match[0]; $out[$key] = true; $last_arg = $key; }else if($last_arg !== null) { $out[$last_arg] = $args[$i]; } } return $out; } $str = 'yankee -D "oo\"d l e\'s" -went "2 town 2 buy him-self" -a pony --calledit=" \"macaroonis\' "'; var_dump(parse_args($str)); /* Will output: array(9) { ["yankee"]=> bool(true) ["D"]=> string(10) "oo"d l e's" ["w"]=> bool(true) ["e"]=> bool(true) ["n"]=> bool(true) ["t"]=> string(21) "2 town 2 buy him-self" ["a"]=> string(4) "pony" ["pony"]=> bool(true) ["calledit"]=> string(12) ""macaroonis'" } */
Initial URL
http://snipplr.com/view/6677/
Initial Description
As seen in [maid450](http://snipplr.com/view/6677/)'s profile, added the ability to parse strings, and the ability to parse quoted strings, also the ability to regognize second arguments after "--" flags.
Initial Title
PHP argument parser
Initial Tags
Initial Language
PHP