Return to foreachLoop.014.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang |
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: }