Annotation of embedaddon/php/tests/lang/foreachLoop.013.phpt, revision 1.1.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>