helly Sun Jul 16 20:52:21 2006 UTC
Added files:
/php-src/ext/spl/tests iterator_050.phpt iterator_051.phpt
iterator_052.phpt iterator_053.phpt
iterator_054.phpt iterator_055.phpt
Modified files:
/php-src/ext/spl spl_iterators.c spl_iterators.h
/php-src/ext/spl/internal regexiterator.inc
Log:
- Upgrade RegexIterator capabilities, see docu
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.137&r2=1.138&diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.137
php-src/ext/spl/spl_iterators.c:1.138
--- php-src/ext/spl/spl_iterators.c:1.137 Tue Jun 6 20:12:46 2006
+++ php-src/ext/spl/spl_iterators.c Sun Jul 16 20:52:20 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.c,v 1.137 2006/06/06 20:12:46 tony2001 Exp $ */
+/* $Id: spl_iterators.c,v 1.138 2006/07/16 20:52:20 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -1005,12 +1005,20 @@
char *regex;
int len, poptions, coptions;
pcre_extra *extra = NULL;
+ long mode = REGIT_MODE_MATCH;
intern->u.regex.flags = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"Os|l", &zobject, ce_inner, ®ex, &len, &intern->u.regex.flags) == FAILURE) {
+ intern->u.regex.preg_flags = 0;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"Os|lll", &zobject, ce_inner, ®ex, &len, &intern->u.regex.flags, &mode,
&intern->u.regex.preg_flags) == FAILURE) {
php_set_error_handling(EH_NORMAL, NULL
TSRMLS_CC);
return NULL;
}
+ if (mode < 0 || mode >= REGIT_MODE_MAX) {
+
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Illegal
mode %ld", mode);
+ php_set_error_handling(EH_NORMAL, NULL
TSRMLS_CC);
+ return NULL;
+ }
+ intern->u.regex.mode = mode;
intern->u.regex.regex = estrndup(regex, len);
intern->u.regex.pce =
pcre_get_compiled_regex_cache(regex, len, &extra, &poptions, &coptions
TSRMLS_CC);
intern->u.regex.pce->refcount++;
@@ -1368,7 +1376,7 @@
} /* }}} */
#if HAVE_PCRE || HAVE_BUNDLED_PCRE
-/* {{{ proto void RegexIterator::__construct(Iterator it, string $regex [, int
$flags])
+/* {{{ proto void RegexIterator::__construct(Iterator it, string regex [, int
flags [, int mode [, int preg_flags]]])
Create an RegexIterator from another iterator and a regular expression */
SPL_METHOD(RegexIterator, __construct)
{
@@ -1379,23 +1387,36 @@
Match (string)current() against regular expression */
SPL_METHOD(RegexIterator, accept)
{
- spl_dual_it_object *intern;
- int count;
- char *subject, tmp[32];
- int subject_len, use_copy = 0;
- zval subject_copy;
- pcre_extra *extra;
+ spl_dual_it_object *intern =
(spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+ char *subject, tmp[32];
+ int subject_len, use_copy, count;
+ zval subject_copy, zcount;
+ pcre *regex = intern->u.regex.pce->re;
+ pcre_extra *extra = intern->u.regex.pce->extra;
- intern = (spl_dual_it_object*)zend_object_store_get_object(getThis()
TSRMLS_CC);
-
if (intern->u.regex.flags & REGIT_USE_KEY) {
if (intern->current.key_type == HASH_KEY_IS_LONG) {
subject_len = snprintf(tmp, sizeof(tmp), "%ld",
intern->current.int_key);
subject = &tmp[0];
+ use_copy = 0;
+ } else if (intern->current.key_type == HASH_KEY_IS_UNICODE) {
+ subject_len = intern->current.str_key_len - 1;
+ subject =
zend_unicode_to_ascii(intern->current.str_key.u, subject_len TSRMLS_DC);
+ if (!subject) {
+ /* FIXME: Unicode support??? : how to handle
this error, with that exception? */
+ if (intern->u.regex.mode != REGIT_MODE_MATCH) {
+ zval_ptr_dtor(&intern->current.data);
+ MAKE_STD_ZVAL(intern->current.data);
+ array_init(intern->current.data);
+ }
+
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Unicode
key could not be converted to ascii");
+ RETURN_FALSE;
+ }
+ use_copy = 1;
} else {
- subject_len = intern->current.str_key_len;
- /* FIXME: Unicode support??? */
- subject = intern->current.str_key.s;
+ subject_len = intern->current.str_key_len - 1;
+ subject = estrndup(intern->current.str_key.s,
subject_len);
+ use_copy = 1;
}
} else {
zend_make_printable_zval(intern->current.data, &subject_copy,
&use_copy);
@@ -1408,17 +1429,49 @@
}
}
- extra = intern->u.regex.pce->extra;
- count = pcre_exec(intern->u.regex.pce->re, extra, subject, subject_len,
0, 0, NULL, 0);
+ switch (intern->u.regex.mode)
+ {
+ case REGIT_MODE_MAX: /* won't happen but makes compiler happy */
+ case REGIT_MODE_MATCH:
+ count = pcre_exec(regex, extra, subject, subject_len, 0, 0,
NULL, 0);
+ RETVAL_BOOL(count >= 0);
+ break;
+
+ case REGIT_MODE_ALL_MATCHES:
+ case REGIT_MODE_GET_MATCH:
+ if (!use_copy) {
+ subject = estrndup(subject, subject_len);
+ use_copy = 1;
+ }
+ zval_ptr_dtor(&intern->current.data);
+ MAKE_STD_ZVAL(intern->current.data);
+ array_init(intern->current.data);
+ php_pcre_match(regex, extra, subject, subject_len, &zcount,
+ intern->current.data, intern->u.regex.mode ==
REGIT_MODE_ALL_MATCHES, 0, 0, 0, 0 TSRMLS_CC);
+ count =
zend_hash_num_elements(Z_ARRVAL_P(intern->current.data));
+ RETVAL_BOOL(count > 0);
+ break;
+
+ case REGIT_MODE_SPLIT:
+ if (!use_copy) {
+ subject = estrndup(subject, subject_len);
+ use_copy = 1;
+ }
+ zval_ptr_dtor(&intern->current.data);
+ MAKE_STD_ZVAL(intern->current.data);
+ array_init(intern->current.data);
+ php_pcre_split(regex, extra, subject, subject_len,
intern->current.data, 0, -1, 0, 0, 0 TSRMLS_CC);
+ count =
zend_hash_num_elements(Z_ARRVAL_P(intern->current.data));
+ RETVAL_BOOL(count > 1);
+ break;
+ }
if (use_copy) {
- zval_dtor(&subject_copy);
+ efree(subject);
}
-
- RETURN_BOOL(count >= 0);
} /* }}} */
-/* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it,
string $regex [, int $flags])
+/* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it,
string regex [, int flags [, int mode [, int preg_flags]]])
Create an RecursiveRegexIterator from another recursive iterator and a
regular expression */
SPL_METHOD(RecursiveRegexIterator, __construct)
{
@@ -1559,6 +1612,8 @@
ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
ZEND_ARG_INFO(0, regex)
ZEND_ARG_INFO(0, flags)
+ ZEND_ARG_INFO(0, mode)
+ ZEND_ARG_INFO(0, preg_flags)
ZEND_END_ARG_INFO();
static zend_function_entry spl_funcs_RegexIterator[] = {
@@ -2772,7 +2827,11 @@
REGISTER_SPL_SUB_CLASS_EX(InfiniteIterator, IteratorIterator,
spl_dual_it_new, spl_funcs_InfiniteIterator);
#if HAVE_PCRE || HAVE_BUNDLED_PCRE
REGISTER_SPL_SUB_CLASS_EX(RegexIterator, FilterIterator,
spl_dual_it_new, spl_funcs_RegexIterator);
- REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "USE_KEY", REGIT_USE_KEY);
+ REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "USE_KEY",
REGIT_USE_KEY);
+ REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "MATCH",
REGIT_MODE_MATCH);
+ REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "GET_MATCH",
REGIT_MODE_GET_MATCH);
+ REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "ALL_MATCHES",
REGIT_MODE_ALL_MATCHES);
+ REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "SPLIT",
REGIT_MODE_SPLIT);
REGISTER_SPL_SUB_CLASS_EX(RecursiveRegexIterator, RegexIterator,
spl_dual_it_new, spl_funcs_RecursiveRegexIterator);
REGISTER_SPL_IMPLEMENTS(RecursiveRegexIterator, RecursiveIterator);
#else
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.h?r1=1.36&r2=1.37&diff_format=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.36
php-src/ext/spl/spl_iterators.h:1.37
--- php-src/ext/spl/spl_iterators.h:1.36 Fri May 26 00:37:33 2006
+++ php-src/ext/spl/spl_iterators.h Sun Jul 16 20:52:20 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.h,v 1.36 2006/05/26 00:37:33 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.37 2006/07/16 20:52:20 helly Exp $ */
#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H
@@ -95,6 +95,14 @@
REGIT_USE_KEY = 0x00000001,
};
+typedef enum {
+ REGIT_MODE_MATCH,
+ REGIT_MODE_GET_MATCH,
+ REGIT_MODE_ALL_MATCHES,
+ REGIT_MODE_SPLIT,
+ REGIT_MODE_MAX,
+} regex_mode;
+
typedef struct _spl_dual_it_object {
zend_object std;
struct {
@@ -130,6 +138,8 @@
#if HAVE_PCRE || HAVE_BUNDLED_PCRE
struct {
int flags;
+ regex_mode mode;
+ long preg_flags;
pcre_cache_entry *pce;
char *regex;
} regex;
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/internal/regexiterator.inc?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/spl/internal/regexiterator.inc
diff -u php-src/ext/spl/internal/regexiterator.inc:1.1
php-src/ext/spl/internal/regexiterator.inc:1.2
--- php-src/ext/spl/internal/regexiterator.inc:1.1 Sun Jul 16 19:16:03 2006
+++ php-src/ext/spl/internal/regexiterator.inc Sun Jul 16 20:52:20 2006
@@ -12,7 +12,7 @@
/**
* @brief Regular expression filter for iterators
* @author Marcus Boerger
- * @version 1.0
+ * @version 1.1
* @since PHP 5.1
*
* This filter iterator assumes that the inner iterator
@@ -20,9 +20,17 @@
class RegexIterator implements FilterIterator
{
const USE_KEY = 0x00000001;
+
+ const MATCH = 0;
+ const GET_MATCH = 1;
+ const ALL_MATCHES = 2;
+ const SPLIT = 3;
private $regex; /**< the regular expression to match against */
private $flags; /**< special flags (USE_KEY) */
+ private $mode; /**< operation mode (MATCH, GET_MATCH, ALL_MATCHES,
SPLIT) */
+ private $preg_flags;/**< PREG_* flags, see preg_match(),
preg_match_all(), preg_split() */
+ private $current; /**< the value used for current() */
/**
* Constructs a regular expression filter around an iterator whose
@@ -30,21 +38,52 @@
*
* @param it Object that implements at least
*/
- function __construct(Iterator $it, $regex, $flags = 0) {
+ function __construct(Iterator $it, $regex, $flags = 0, $mode = 0,
$preg_flags = 0) {
parent::__construct($it);
$this->regex = $regex;
$this->flags = $flags;
+ $this->mode = $mode;
+ $this->preg_flags = $preg_flags;
}
/**
- * Match current or key against regular expression.
+ * Match current or key against regular expression using mode, flags and
+ * preg_flags.
*
* @return whether this is a match
+ *
+ * @warning never call this twice for the same state
*/
function accept()
{
- $subject = ($this->flags & self::USE_KEY) ? parent::key() :
parent::current();
- return preg_match($this->regex, $subject);
+ $matches = array();
+ $this->current = parent::current();
+ /* note that we use $this->current, rather than calling
parent::current() */
+ $subject = ($this->flags & self::USE_KEY) ? parent::key() :
$this->current;
+ switch($this->mode)
+ {
+ case self::MATCH:
+ return preg_match($this->regex, $subject,
$matches, $this->preg_flags);
+
+ case self::GET_MATCH:
+ $this->current = array();
+ return preg_match($this->regex, $subject,
$this->current, $this->preg_flags) > 0;
+
+ case self::ALL_MATCHES:
+ $this->current = array();
+ return preg_match_all($this->regex, $subject,
$this->current, $this->preg_flags) > 0;
+
+ case self::SPLIT:
+ $this->current = array();
+ preg_split($this->regex, $subject,
$this->current, $this->preg_flags) > 1;
+ }
+ }
+
+ /** @return the current value after accept has been called
+ */
+ function current()
+ {
+ return $this->current;
}
}
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_050.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_050.phpt
+++ php-src/ext/spl/tests/iterator_050.phpt
--TEST--
SPL: RegexIterator::GET_MATCH
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
$it = new MyRegexIterator($ar, '/(\d),(\d)/', 0, RegexIterator::GET_MATCH);
$it->show();
$it = new MyRegexIterator($ar, '/(\d)/', 0, RegexIterator::GET_MATCH);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
int(1)
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
int(2)
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
int(0)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
int(1)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
int(2)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
object(ArrayIterator)#%d (9) {
[0]=>
%s(1) "1"
[1]=>
%s(3) "1,2"
[2]=>
%s(5) "1,2,3"
[3]=>
%s(0) ""
[4]=>
NULL
[5]=>
array(0) {
}
[6]=>
%s(6) "FooBar"
[7]=>
%s(1) ","
[8]=>
%s(2) ",,"
}
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_051.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_051.phpt
+++ php-src/ext/spl/tests/iterator_051.phpt
--TEST--
SPL: RegexIterator::GET_MATCH, USE_KEY
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1'=>0,'1,2'=>1,'1,2,3'=>2,0=>3,'FooBar'=>4,','=>5,',,'=>6));
$it = new MyRegexIterator($ar, '/(\d),(\d)/', RegexIterator::USE_KEY,
RegexIterator::GET_MATCH);
$it->show();
$it = new MyRegexIterator($ar, '/(\d)/', RegexIterator::USE_KEY,
RegexIterator::GET_MATCH);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
string(3) "1,2"
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
string(5) "1,2,3"
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
int(1)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
string(3) "1,2"
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
string(5) "1,2,3"
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
int(0)
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
["1,2"]=>
int(1)
["1,2,3"]=>
int(2)
[0]=>
int(3)
["FooBar"]=>
int(4)
[","]=>
int(5)
[",,"]=>
int(6)
}
===DONE===
--UEXPECTF--
unicode(3) "1,2"
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
unicode(5) "1,2,3"
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
int(1)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
unicode(3) "1,2"
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
unicode(5) "1,2,3"
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
int(0)
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
[u"1,2"]=>
int(1)
[u"1,2,3"]=>
int(2)
[0]=>
int(3)
[u"FooBar"]=>
int(4)
[u","]=>
int(5)
[u",,"]=>
int(6)
}
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_052.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_052.phpt
+++ php-src/ext/spl/tests/iterator_052.phpt
--TEST--
SPL: RegexIterator::ALL_MATCHES
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
$it = new MyRegexIterator($ar, '/(\d),(\d)/', 0, RegexIterator::ALL_MATCHES);
$it->show();
$it = new MyRegexIterator($ar, '/(\d)/', 0, RegexIterator::ALL_MATCHES);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
int(1)
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
int(2)
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
int(0)
array(1) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
}
int(1)
array(2) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
}
int(2)
array(3) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
[2]=>
array(2) {
[0]=>
string(1) "3"
[1]=>
string(1) "3"
}
}
object(ArrayIterator)#%d (9) {
[0]=>
%s(1) "1"
[1]=>
%s(3) "1,2"
[2]=>
%s(5) "1,2,3"
[3]=>
%s(0) ""
[4]=>
NULL
[5]=>
array(0) {
}
[6]=>
%s(6) "FooBar"
[7]=>
%s(1) ","
[8]=>
%s(2) ",,"
}
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_053.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_053.phpt
+++ php-src/ext/spl/tests/iterator_053.phpt
--TEST--
SPL: RegexIterator::ALL_MATCHES, USE_KEY
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1'=>0,'1,2'=>1,'1,2,3'=>2,0=>3,'FooBar'=>4,','=>5,',,'=>6));
$it = new MyRegexIterator($ar, '/(\d),(\d)/', RegexIterator::USE_KEY,
RegexIterator::ALL_MATCHES);
$it->show();
$it = new MyRegexIterator($ar, '/(\d)/', RegexIterator::USE_KEY,
RegexIterator::ALL_MATCHES);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
string(3) "1,2"
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
string(5) "1,2,3"
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
int(1)
array(1) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
}
string(3) "1,2"
array(2) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
}
string(5) "1,2,3"
array(3) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
[2]=>
array(2) {
[0]=>
string(1) "3"
[1]=>
string(1) "3"
}
}
int(0)
array(1) {
[0]=>
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
}
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
["1,2"]=>
int(1)
["1,2,3"]=>
int(2)
[0]=>
int(3)
["FooBar"]=>
int(4)
[","]=>
int(5)
[",,"]=>
int(6)
}
===DONE===
--UEXPECTF--
unicode(3) "1,2"
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
unicode(5) "1,2,3"
array(1) {
[0]=>
array(3) {
[0]=>
string(3) "1,2"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
int(1)
array(1) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
}
unicode(3) "1,2"
array(2) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
}
unicode(5) "1,2,3"
array(3) {
[0]=>
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "1"
}
[1]=>
array(2) {
[0]=>
string(1) "2"
[1]=>
string(1) "2"
}
[2]=>
array(2) {
[0]=>
string(1) "3"
[1]=>
string(1) "3"
}
}
int(0)
array(1) {
[0]=>
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "0"
}
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
[u"1,2"]=>
int(1)
[u"1,2,3"]=>
int(2)
[0]=>
int(3)
[u"FooBar"]=>
int(4)
[u","]=>
int(5)
[u",,"]=>
int(6)
}
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_054.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_054.phpt
+++ php-src/ext/spl/tests/iterator_054.phpt
--TEST--
SPL: RegexIterator::SPLIT
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
$it = new MyRegexIterator($ar, '/,/', 0, RegexIterator::SPLIT);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
int(1)
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
}
int(2)
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
int(7)
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
int(8)
array(3) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
}
object(ArrayIterator)#%d (9) {
[0]=>
%s(1) "1"
[1]=>
%s(3) "1,2"
[2]=>
%s(5) "1,2,3"
[3]=>
%s(0) ""
[4]=>
NULL
[5]=>
array(0) {
}
[6]=>
%s(6) "FooBar"
[7]=>
%s(1) ","
[8]=>
%s(2) ",,"
}
===DONE===
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/iterator_055.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/iterator_055.phpt
+++ php-src/ext/spl/tests/iterator_055.phpt
--TEST--
SPL: RegexIterator::SPLIT, USE_KEY
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class MyRegexIterator extends RegexIterator
{
function show()
{
foreach($this as $k => $v)
{
var_dump($k);
var_dump($v);
}
}
}
$ar = new
ArrayIterator(array('1'=>0,'1,2'=>1,'1,2,3'=>2,0=>3,'FooBar'=>4,','=>5,',,'=>6));
$it = new MyRegexIterator($ar, '/(\d),(\d)/', RegexIterator::USE_KEY,
RegexIterator::SPLIT);
$it->show();
var_dump($ar);
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
string(3) "1,2"
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
string(5) "1,2,3"
array(2) {
[0]=>
string(0) ""
[1]=>
string(2) ",3"
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
["1,2"]=>
int(1)
["1,2,3"]=>
int(2)
[0]=>
int(3)
["FooBar"]=>
int(4)
[","]=>
int(5)
[",,"]=>
int(6)
}
===DONE===
--UEXPECTF--
unicode(3) "1,2"
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
unicode(5) "1,2,3"
array(2) {
[0]=>
string(0) ""
[1]=>
string(2) ",3"
}
object(ArrayIterator)#%d (7) {
[1]=>
int(0)
[u"1,2"]=>
int(1)
[u"1,2,3"]=>
int(2)
[0]=>
int(3)
[u"FooBar"]=>
int(4)
[u","]=>
int(5)
[u",,"]=>
int(6)
}
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php