1--TEST-- 2SPL: RegexIterator::ALL_MATCHES 3--FILE-- 4<?php 5 6class MyRegexIterator extends RegexIterator 7{ 8 public $uk, $re; 9 10 function __construct($it, $re, $mode, $flags = 0) 11 { 12 $this->uk = $flags & self::USE_KEY; 13 $this->re = $re; 14 parent::__construct($it, $re, $mode, $flags); 15 } 16 17 function show() 18 { 19 foreach($this as $k => $v) 20 { 21 var_dump($k); 22 var_dump($v); 23 } 24 } 25 26 function accept() 27 { 28 @preg_match_all($this->re, (string)($this->uk ? $this->key() : $this->current()), $sub); 29 $ret = parent::accept(); 30 var_dump($sub == $this->current()); 31 return $ret; 32 } 33} 34 35$ar = new ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,')); 36$it = new MyRegexIterator($ar, '/(\d),(\d)/', RegexIterator::ALL_MATCHES); 37$it->show(); 38 39$it = new MyRegexIterator($ar, '/(\d)/', RegexIterator::ALL_MATCHES); 40$it->show(); 41 42var_dump($ar); 43 44?> 45===DONE=== 46<?php exit(0); ?> 47--EXPECTF-- 48bool(true) 49int(0) 50array(3) { 51 [0]=> 52 array(0) { 53 } 54 [1]=> 55 array(0) { 56 } 57 [2]=> 58 array(0) { 59 } 60} 61bool(true) 62int(1) 63array(3) { 64 [0]=> 65 array(1) { 66 [0]=> 67 string(3) "1,2" 68 } 69 [1]=> 70 array(1) { 71 [0]=> 72 string(1) "1" 73 } 74 [2]=> 75 array(1) { 76 [0]=> 77 string(1) "2" 78 } 79} 80bool(true) 81int(2) 82array(3) { 83 [0]=> 84 array(1) { 85 [0]=> 86 string(3) "1,2" 87 } 88 [1]=> 89 array(1) { 90 [0]=> 91 string(1) "1" 92 } 93 [2]=> 94 array(1) { 95 [0]=> 96 string(1) "2" 97 } 98} 99bool(true) 100int(3) 101array(3) { 102 [0]=> 103 array(0) { 104 } 105 [1]=> 106 array(0) { 107 } 108 [2]=> 109 array(0) { 110 } 111} 112bool(true) 113int(4) 114array(3) { 115 [0]=> 116 array(0) { 117 } 118 [1]=> 119 array(0) { 120 } 121 [2]=> 122 array(0) { 123 } 124} 125bool(true) 126int(5) 127array(3) { 128 [0]=> 129 array(0) { 130 } 131 [1]=> 132 array(0) { 133 } 134 [2]=> 135 array(0) { 136 } 137} 138bool(true) 139int(6) 140array(3) { 141 [0]=> 142 array(0) { 143 } 144 [1]=> 145 array(0) { 146 } 147 [2]=> 148 array(0) { 149 } 150} 151bool(true) 152int(7) 153array(3) { 154 [0]=> 155 array(0) { 156 } 157 [1]=> 158 array(0) { 159 } 160 [2]=> 161 array(0) { 162 } 163} 164bool(true) 165int(8) 166array(3) { 167 [0]=> 168 array(0) { 169 } 170 [1]=> 171 array(0) { 172 } 173 [2]=> 174 array(0) { 175 } 176} 177bool(true) 178int(0) 179array(2) { 180 [0]=> 181 array(1) { 182 [0]=> 183 string(1) "1" 184 } 185 [1]=> 186 array(1) { 187 [0]=> 188 string(1) "1" 189 } 190} 191bool(true) 192int(1) 193array(2) { 194 [0]=> 195 array(2) { 196 [0]=> 197 string(1) "1" 198 [1]=> 199 string(1) "2" 200 } 201 [1]=> 202 array(2) { 203 [0]=> 204 string(1) "1" 205 [1]=> 206 string(1) "2" 207 } 208} 209bool(true) 210int(2) 211array(2) { 212 [0]=> 213 array(3) { 214 [0]=> 215 string(1) "1" 216 [1]=> 217 string(1) "2" 218 [2]=> 219 string(1) "3" 220 } 221 [1]=> 222 array(3) { 223 [0]=> 224 string(1) "1" 225 [1]=> 226 string(1) "2" 227 [2]=> 228 string(1) "3" 229 } 230} 231bool(true) 232int(3) 233array(2) { 234 [0]=> 235 array(0) { 236 } 237 [1]=> 238 array(0) { 239 } 240} 241bool(true) 242int(4) 243array(2) { 244 [0]=> 245 array(0) { 246 } 247 [1]=> 248 array(0) { 249 } 250} 251bool(true) 252int(5) 253array(2) { 254 [0]=> 255 array(0) { 256 } 257 [1]=> 258 array(0) { 259 } 260} 261bool(true) 262int(6) 263array(2) { 264 [0]=> 265 array(0) { 266 } 267 [1]=> 268 array(0) { 269 } 270} 271bool(true) 272int(7) 273array(2) { 274 [0]=> 275 array(0) { 276 } 277 [1]=> 278 array(0) { 279 } 280} 281bool(true) 282int(8) 283array(2) { 284 [0]=> 285 array(0) { 286 } 287 [1]=> 288 array(0) { 289 } 290} 291object(ArrayIterator)#%d (1) { 292 ["storage":"ArrayIterator":private]=> 293 array(9) { 294 [0]=> 295 %s(1) "1" 296 [1]=> 297 %s(3) "1,2" 298 [2]=> 299 %s(5) "1,2,3" 300 [3]=> 301 %s(0) "" 302 [4]=> 303 NULL 304 [5]=> 305 array(0) { 306 } 307 [6]=> 308 %s(6) "FooBar" 309 [7]=> 310 %s(1) "," 311 [8]=> 312 %s(2) ",," 313 } 314} 315===DONE=== 316