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