Function to convert command-line-interface arguments to a PHP array.
Source Code
<?php
/**
* Copyright (c) 2008, Corey's Consulting LLC. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
//
// These are common functions used by all the scripts.
//
//*************************************************************************
// Convert command line toggles into an array:
//
// php file.php orphan --foo=bar -abc -AB 'hello world' --baz
//
// produces:
//
// Array
// (
// [foo] => bar
// [a] => true
// [b] => true
// [c] => true
// [A] => true
// [B] => hello world
// [baz] => true
// )
//
// NOTE: command line arguments that do NOT have a dash in front of them
// are ignored (see the word "orphan" in the example above).
//
function parseCliArgs ( $args )
{
$out = array();
$last_arg = null;
for($i = 1, $il = sizeof($args); $i < $il; $i++)
{
if( (bool)preg_match("/^--(.+)/", $args[$i], $match) )
{
$parts = explode("=", $match[1]);
$key = preg_replace("/[^a-z0-9]+/", "", $parts[0]);
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))
{
for( $j = 0, $jl = strlen($match[1]); $j < $jl; $j++ )
{
$key = $match[1]{$j};
$out[$key] = true;
}
$last_arg = $key;
}
else if($last_arg !== null)
{
$out[$last_arg] = $args[$i];
}
}
return $out;
} // end parseCliArgs()