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 } }