56 lines
1.4 KiB
PHP
56 lines
1.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace astropenguin\botanical;
|
||
|
use ArrayObject;
|
||
|
|
||
|
class Args
|
||
|
{
|
||
|
//parseOptions utilitiese by tgckpg
|
||
|
static function PARSE ( $argStream, $handler )
|
||
|
{
|
||
|
//Chop first useless argument -- argv[0]
|
||
|
array_shift ( $argStream ) ;
|
||
|
//Initiate ArrayObject for iterator
|
||
|
$arrayobject = new ArrayObject ( $argStream ) ;
|
||
|
//Initiate iterator for iteration
|
||
|
$iterator = $arrayobject->getIterator();
|
||
|
|
||
|
//If options is set first
|
||
|
if( $iterator->valid() && preg_match ( '/^-\w$/', $iterator->current() ) )
|
||
|
{
|
||
|
//iterate through whole argument stream
|
||
|
for ( ; $iterator->valid(); $iterator->next() )
|
||
|
{
|
||
|
//Check if reached next option
|
||
|
if( preg_match ( '/^-\w$/', $opts = $iterator->current() ) )
|
||
|
{
|
||
|
//Get current options
|
||
|
$currOpt = $opts;
|
||
|
//echo "$currOpt\n";
|
||
|
//Test if next stream is an option
|
||
|
for ( $iterator->next(); $iterator->valid(); $iterator->next() )
|
||
|
{
|
||
|
if ( preg_match ( '/^-\w$/', $opts = $iterator->current() ) )
|
||
|
{
|
||
|
//echo "$currOpt $opts\n";
|
||
|
$handler($currOpt);
|
||
|
$currOpt = $opts;
|
||
|
} else break;
|
||
|
//var_dump($iterator->valid());
|
||
|
}
|
||
|
}//End if
|
||
|
//echo "$currOpt $opts\n";
|
||
|
$handler($currOpt, $opts);
|
||
|
//A temporary fix for infinite loop
|
||
|
if(!$iterator->valid()) break;
|
||
|
}// End for
|
||
|
}
|
||
|
// If option is not set first.
|
||
|
else
|
||
|
{
|
||
|
//Try other approach.
|
||
|
}
|
||
|
// End if
|
||
|
}
|
||
|
}
|