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