Annotation of embedaddon/php/tests/lang/foreachLoop.012.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Directly modifying an unreferenced array when foreach'ing over it.
! 3: --FILE--
! 4: <?php
! 5:
! 6: define('MAX_LOOPS',5);
! 7:
! 8: function withRefValue($elements, $transform) {
! 9: echo "\n---( Array with $elements element(s): )---\n";
! 10: //Build array:
! 11: for ($i=0; $i<$elements; $i++) {
! 12: $a[] = "v.$i";
! 13: }
! 14: $counter=0;
! 15:
! 16: echo "--> State of array before loop:\n";
! 17: var_dump($a);
! 18:
! 19: echo "--> Do loop:\n";
! 20: foreach ($a as $k=>$v) {
! 21: echo " iteration $counter: \$k=$k; \$v=$v\n";
! 22: eval($transform);
! 23: $counter++;
! 24: if ($counter>MAX_LOOPS) {
! 25: echo " ** Stuck in a loop! **\n";
! 26: break;
! 27: }
! 28: }
! 29:
! 30: echo "--> State of array after loop:\n";
! 31: var_dump($a);
! 32: }
! 33:
! 34:
! 35: echo "\nPopping elements off end of an unreferenced array";
! 36: $transform = 'array_pop($a);';
! 37: withRefValue(1, $transform);
! 38: withRefValue(2, $transform);
! 39: withRefValue(3, $transform);
! 40: withRefValue(4, $transform);
! 41:
! 42: echo "\n\n\nShift elements off start of an unreferenced array";
! 43: $transform = 'array_shift($a);';
! 44: withRefValue(1, $transform);
! 45: withRefValue(2, $transform);
! 46: withRefValue(3, $transform);
! 47: withRefValue(4, $transform);
! 48:
! 49: echo "\n\n\nRemove current element of an unreferenced array";
! 50: $transform = 'unset($a[$k]);';
! 51: withRefValue(1, $transform);
! 52: withRefValue(2, $transform);
! 53: withRefValue(3, $transform);
! 54: withRefValue(4, $transform);
! 55:
! 56: echo "\n\n\nAdding elements to the end of an unreferenced array";
! 57: $transform = 'array_push($a, "new.$counter");';
! 58: withRefValue(1, $transform);
! 59: withRefValue(2, $transform);
! 60: withRefValue(3, $transform);
! 61: withRefValue(4, $transform);
! 62:
! 63: echo "\n\n\nAdding elements to the start of an unreferenced array";
! 64: $transform = 'array_unshift($a, "new.$counter");';
! 65: withRefValue(1, $transform);
! 66: withRefValue(2, $transform);
! 67: withRefValue(3, $transform);
! 68: withRefValue(4, $transform);
! 69:
! 70: ?>
! 71: --EXPECTF--
! 72:
! 73: Popping elements off end of an unreferenced array
! 74: ---( Array with 1 element(s): )---
! 75: --> State of array before loop:
! 76: array(1) {
! 77: [0]=>
! 78: string(3) "v.0"
! 79: }
! 80: --> Do loop:
! 81: iteration 0: $k=0; $v=v.0
! 82: --> State of array after loop:
! 83: array(0) {
! 84: }
! 85:
! 86: ---( Array with 2 element(s): )---
! 87: --> State of array before loop:
! 88: array(2) {
! 89: [0]=>
! 90: string(3) "v.0"
! 91: [1]=>
! 92: string(3) "v.1"
! 93: }
! 94: --> Do loop:
! 95: iteration 0: $k=0; $v=v.0
! 96: iteration 1: $k=1; $v=v.1
! 97: --> State of array after loop:
! 98: array(0) {
! 99: }
! 100:
! 101: ---( Array with 3 element(s): )---
! 102: --> State of array before loop:
! 103: array(3) {
! 104: [0]=>
! 105: string(3) "v.0"
! 106: [1]=>
! 107: string(3) "v.1"
! 108: [2]=>
! 109: string(3) "v.2"
! 110: }
! 111: --> Do loop:
! 112: iteration 0: $k=0; $v=v.0
! 113: iteration 1: $k=1; $v=v.1
! 114: iteration 2: $k=2; $v=v.2
! 115: --> State of array after loop:
! 116: array(0) {
! 117: }
! 118:
! 119: ---( Array with 4 element(s): )---
! 120: --> State of array before loop:
! 121: array(4) {
! 122: [0]=>
! 123: string(3) "v.0"
! 124: [1]=>
! 125: string(3) "v.1"
! 126: [2]=>
! 127: string(3) "v.2"
! 128: [3]=>
! 129: string(3) "v.3"
! 130: }
! 131: --> Do loop:
! 132: iteration 0: $k=0; $v=v.0
! 133: iteration 1: $k=1; $v=v.1
! 134: iteration 2: $k=2; $v=v.2
! 135: iteration 3: $k=3; $v=v.3
! 136: --> State of array after loop:
! 137: array(0) {
! 138: }
! 139:
! 140:
! 141:
! 142: Shift elements off start of an unreferenced array
! 143: ---( Array with 1 element(s): )---
! 144: --> State of array before loop:
! 145: array(1) {
! 146: [0]=>
! 147: string(3) "v.0"
! 148: }
! 149: --> Do loop:
! 150: iteration 0: $k=0; $v=v.0
! 151: --> State of array after loop:
! 152: array(0) {
! 153: }
! 154:
! 155: ---( Array with 2 element(s): )---
! 156: --> State of array before loop:
! 157: array(2) {
! 158: [0]=>
! 159: string(3) "v.0"
! 160: [1]=>
! 161: string(3) "v.1"
! 162: }
! 163: --> Do loop:
! 164: iteration 0: $k=0; $v=v.0
! 165: iteration 1: $k=1; $v=v.1
! 166: --> State of array after loop:
! 167: array(0) {
! 168: }
! 169:
! 170: ---( Array with 3 element(s): )---
! 171: --> State of array before loop:
! 172: array(3) {
! 173: [0]=>
! 174: string(3) "v.0"
! 175: [1]=>
! 176: string(3) "v.1"
! 177: [2]=>
! 178: string(3) "v.2"
! 179: }
! 180: --> Do loop:
! 181: iteration 0: $k=0; $v=v.0
! 182: iteration 1: $k=1; $v=v.1
! 183: iteration 2: $k=2; $v=v.2
! 184: --> State of array after loop:
! 185: array(0) {
! 186: }
! 187:
! 188: ---( Array with 4 element(s): )---
! 189: --> State of array before loop:
! 190: array(4) {
! 191: [0]=>
! 192: string(3) "v.0"
! 193: [1]=>
! 194: string(3) "v.1"
! 195: [2]=>
! 196: string(3) "v.2"
! 197: [3]=>
! 198: string(3) "v.3"
! 199: }
! 200: --> Do loop:
! 201: iteration 0: $k=0; $v=v.0
! 202: iteration 1: $k=1; $v=v.1
! 203: iteration 2: $k=2; $v=v.2
! 204: iteration 3: $k=3; $v=v.3
! 205: --> State of array after loop:
! 206: array(0) {
! 207: }
! 208:
! 209:
! 210:
! 211: Remove current element of an unreferenced array
! 212: ---( Array with 1 element(s): )---
! 213: --> State of array before loop:
! 214: array(1) {
! 215: [0]=>
! 216: string(3) "v.0"
! 217: }
! 218: --> Do loop:
! 219: iteration 0: $k=0; $v=v.0
! 220: --> State of array after loop:
! 221: array(0) {
! 222: }
! 223:
! 224: ---( Array with 2 element(s): )---
! 225: --> State of array before loop:
! 226: array(2) {
! 227: [0]=>
! 228: string(3) "v.0"
! 229: [1]=>
! 230: string(3) "v.1"
! 231: }
! 232: --> Do loop:
! 233: iteration 0: $k=0; $v=v.0
! 234: iteration 1: $k=1; $v=v.1
! 235: --> State of array after loop:
! 236: array(0) {
! 237: }
! 238:
! 239: ---( Array with 3 element(s): )---
! 240: --> State of array before loop:
! 241: array(3) {
! 242: [0]=>
! 243: string(3) "v.0"
! 244: [1]=>
! 245: string(3) "v.1"
! 246: [2]=>
! 247: string(3) "v.2"
! 248: }
! 249: --> Do loop:
! 250: iteration 0: $k=0; $v=v.0
! 251: iteration 1: $k=1; $v=v.1
! 252: iteration 2: $k=2; $v=v.2
! 253: --> State of array after loop:
! 254: array(0) {
! 255: }
! 256:
! 257: ---( Array with 4 element(s): )---
! 258: --> State of array before loop:
! 259: array(4) {
! 260: [0]=>
! 261: string(3) "v.0"
! 262: [1]=>
! 263: string(3) "v.1"
! 264: [2]=>
! 265: string(3) "v.2"
! 266: [3]=>
! 267: string(3) "v.3"
! 268: }
! 269: --> Do loop:
! 270: iteration 0: $k=0; $v=v.0
! 271: iteration 1: $k=1; $v=v.1
! 272: iteration 2: $k=2; $v=v.2
! 273: iteration 3: $k=3; $v=v.3
! 274: --> State of array after loop:
! 275: array(0) {
! 276: }
! 277:
! 278:
! 279:
! 280: Adding elements to the end of an unreferenced array
! 281: ---( Array with 1 element(s): )---
! 282: --> State of array before loop:
! 283: array(1) {
! 284: [0]=>
! 285: string(3) "v.0"
! 286: }
! 287: --> Do loop:
! 288: iteration 0: $k=0; $v=v.0
! 289: --> State of array after loop:
! 290: array(2) {
! 291: [0]=>
! 292: string(3) "v.0"
! 293: [1]=>
! 294: string(5) "new.0"
! 295: }
! 296:
! 297: ---( Array with 2 element(s): )---
! 298: --> State of array before loop:
! 299: array(2) {
! 300: [0]=>
! 301: string(3) "v.0"
! 302: [1]=>
! 303: string(3) "v.1"
! 304: }
! 305: --> Do loop:
! 306: iteration 0: $k=0; $v=v.0
! 307: iteration 1: $k=1; $v=v.1
! 308: --> State of array after loop:
! 309: array(4) {
! 310: [0]=>
! 311: string(3) "v.0"
! 312: [1]=>
! 313: string(3) "v.1"
! 314: [2]=>
! 315: string(5) "new.0"
! 316: [3]=>
! 317: string(5) "new.1"
! 318: }
! 319:
! 320: ---( Array with 3 element(s): )---
! 321: --> State of array before loop:
! 322: array(3) {
! 323: [0]=>
! 324: string(3) "v.0"
! 325: [1]=>
! 326: string(3) "v.1"
! 327: [2]=>
! 328: string(3) "v.2"
! 329: }
! 330: --> Do loop:
! 331: iteration 0: $k=0; $v=v.0
! 332: iteration 1: $k=1; $v=v.1
! 333: iteration 2: $k=2; $v=v.2
! 334: --> State of array after loop:
! 335: array(6) {
! 336: [0]=>
! 337: string(3) "v.0"
! 338: [1]=>
! 339: string(3) "v.1"
! 340: [2]=>
! 341: string(3) "v.2"
! 342: [3]=>
! 343: string(5) "new.0"
! 344: [4]=>
! 345: string(5) "new.1"
! 346: [5]=>
! 347: string(5) "new.2"
! 348: }
! 349:
! 350: ---( Array with 4 element(s): )---
! 351: --> State of array before loop:
! 352: array(4) {
! 353: [0]=>
! 354: string(3) "v.0"
! 355: [1]=>
! 356: string(3) "v.1"
! 357: [2]=>
! 358: string(3) "v.2"
! 359: [3]=>
! 360: string(3) "v.3"
! 361: }
! 362: --> Do loop:
! 363: iteration 0: $k=0; $v=v.0
! 364: iteration 1: $k=1; $v=v.1
! 365: iteration 2: $k=2; $v=v.2
! 366: iteration 3: $k=3; $v=v.3
! 367: --> State of array after loop:
! 368: array(8) {
! 369: [0]=>
! 370: string(3) "v.0"
! 371: [1]=>
! 372: string(3) "v.1"
! 373: [2]=>
! 374: string(3) "v.2"
! 375: [3]=>
! 376: string(3) "v.3"
! 377: [4]=>
! 378: string(5) "new.0"
! 379: [5]=>
! 380: string(5) "new.1"
! 381: [6]=>
! 382: string(5) "new.2"
! 383: [7]=>
! 384: string(5) "new.3"
! 385: }
! 386:
! 387:
! 388:
! 389: Adding elements to the start of an unreferenced array
! 390: ---( Array with 1 element(s): )---
! 391: --> State of array before loop:
! 392: array(1) {
! 393: [0]=>
! 394: string(3) "v.0"
! 395: }
! 396: --> Do loop:
! 397: iteration 0: $k=0; $v=v.0
! 398: --> State of array after loop:
! 399: array(2) {
! 400: [0]=>
! 401: string(5) "new.0"
! 402: [1]=>
! 403: string(3) "v.0"
! 404: }
! 405:
! 406: ---( Array with 2 element(s): )---
! 407: --> State of array before loop:
! 408: array(2) {
! 409: [0]=>
! 410: string(3) "v.0"
! 411: [1]=>
! 412: string(3) "v.1"
! 413: }
! 414: --> Do loop:
! 415: iteration 0: $k=0; $v=v.0
! 416: iteration 1: $k=1; $v=v.1
! 417: --> State of array after loop:
! 418: array(4) {
! 419: [0]=>
! 420: string(5) "new.1"
! 421: [1]=>
! 422: string(5) "new.0"
! 423: [2]=>
! 424: string(3) "v.0"
! 425: [3]=>
! 426: string(3) "v.1"
! 427: }
! 428:
! 429: ---( Array with 3 element(s): )---
! 430: --> State of array before loop:
! 431: array(3) {
! 432: [0]=>
! 433: string(3) "v.0"
! 434: [1]=>
! 435: string(3) "v.1"
! 436: [2]=>
! 437: string(3) "v.2"
! 438: }
! 439: --> Do loop:
! 440: iteration 0: $k=0; $v=v.0
! 441: iteration 1: $k=1; $v=v.1
! 442: iteration 2: $k=2; $v=v.2
! 443: --> State of array after loop:
! 444: array(6) {
! 445: [0]=>
! 446: string(5) "new.2"
! 447: [1]=>
! 448: string(5) "new.1"
! 449: [2]=>
! 450: string(5) "new.0"
! 451: [3]=>
! 452: string(3) "v.0"
! 453: [4]=>
! 454: string(3) "v.1"
! 455: [5]=>
! 456: string(3) "v.2"
! 457: }
! 458:
! 459: ---( Array with 4 element(s): )---
! 460: --> State of array before loop:
! 461: array(4) {
! 462: [0]=>
! 463: string(3) "v.0"
! 464: [1]=>
! 465: string(3) "v.1"
! 466: [2]=>
! 467: string(3) "v.2"
! 468: [3]=>
! 469: string(3) "v.3"
! 470: }
! 471: --> Do loop:
! 472: iteration 0: $k=0; $v=v.0
! 473: iteration 1: $k=1; $v=v.1
! 474: iteration 2: $k=2; $v=v.2
! 475: iteration 3: $k=3; $v=v.3
! 476: --> State of array after loop:
! 477: array(8) {
! 478: [0]=>
! 479: string(5) "new.3"
! 480: [1]=>
! 481: string(5) "new.2"
! 482: [2]=>
! 483: string(5) "new.1"
! 484: [3]=>
! 485: string(5) "new.0"
! 486: [4]=>
! 487: string(3) "v.0"
! 488: [5]=>
! 489: string(3) "v.1"
! 490: [6]=>
! 491: string(3) "v.2"
! 492: [7]=>
! 493: string(3) "v.3"
! 494: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>