[prev in list] [next in list] [prev in thread] [next in thread]
List: php-general
Subject: [PHP] ArrayInterator always true
From: TCP <tgckpg () gmail ! com>
Date: 2012-01-23 20:18:56
Message-ID: CAJg5x_bQREK7KzoaU=E1UJprkUve52ShS6aE-_ozyEH+9mpyKg () mail ! gmail ! com
[Download RAW message or body]
I'm trying to parse an $agrv array that contain options (without
square brackets): [-a "abc" -b "bbc" "bcc" -d "dbc" -e -f]
I use ArrayIterator to iterate through the line:
- whenever it reach /-\w/, it read through the following qoutes
until it reach another /-\w/.
The problem is it seems the $iterator->valid() always return TRUE and
cause infinte loop.
function parseOptions ( $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, $opts);
$currOpt = $opts;
}
var_dump($iterator->valid());
}
}//End if
//echo "$currOpt $opts\n";
//$handler($currOpt, $opts);
}// End for
//If option is not set first.
} else {
//Try other approach.
}// End if
}
I've no idea what is going on.
Please help.
Regards,
Panguin
--
筆使文富,卻使人窮。
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic