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