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