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