Annotation of embedaddon/php/tests/lang/foreachLoop.012.phpt, revision 1.1.1.1
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>