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