![]() ![]() | ![]() |
1.1 misho 1: --TEST--
2: Test array_merge_recursive() function : usage variations - different arrays for 'arr1' argument
3: --FILE--
4: <?php
5: /* Prototype : array array_merge_recursive(array $arr1[, array $...])
6: * Description: Recursively merges elements from passed arrays into one array
7: * Source code: ext/standard/array.c
8: */
9:
10: /*
11: * Passing different arrays to $arr1 argument and testing whether
12: * array_merge_recursive() behaves in an expected way.
13: */
14:
15: echo "*** Testing array_merge_recursive() : Passing different arrays to \$arr1 argument ***\n";
16:
17: /* Different heredoc strings */
18:
19: // heredoc with blank line
20: $blank_line = <<<EOT
21:
22:
23: EOT;
24:
25: // heredoc with multiline string
26: $multiline_string = <<<EOT
27: hello world
28: The quick brown fox jumped over;
29: the lazy dog
30: This is a double quoted string
31: EOT;
32:
1.1.1.2 ! misho 33: // heredoc with different whitespaces
1.1 misho 34: $diff_whitespaces = <<<EOT
35: hello\r world\t
36: 1111\t\t != 2222\v\v
37: heredoc\ndouble quoted string. with\vdifferent\fwhite\vspaces
38: EOT;
39:
40: // heredoc with quoted strings and numeric values
41: $numeric_string = <<<EOT
42: 11 < 12. 123 >22
43: 'single quoted string'
44: "double quoted string"
45: 2222 != 1111.\t 0000 = 0000\n
46: EOT;
47:
48: // arrays passed to $arr1 argument
49: $arrays = array (
50: /*1*/ array(1, 2,), // with default keys and numeric values
51: array(1.1, 2.2), // with default keys & float values
52: array(false, true), // with default keys and boolean values
53: array(), // empty array
54: /*5*/ array(NULL), // with NULL
55: array("a\v\f", "aaaa\r", "b", "\[\]\!\@\#\$\%\^\&\*\(\)\{\}"), // with double quoted strings
56: array('a\v\f', 'aaaa\r', 'b', '\[\]\!\@\#\$\%\^\&\*\(\)\{\}'), // with single quoted strings
57: array("h1" => $blank_line, "h2" => $multiline_string, "h3" => $diff_whitespaces), // with heredocs
58:
59: // associative arrays
60: /*9*/ array(1 => "one", 2 => "two"), // explicit numeric keys, string values
61: array("one" => 1, "two" => 2, "1" => 1 ), // string keys & numeric values
62: array( 1 => 10, 2 => 20, 4 => 40), // explicit numeric keys and numeric values
63: array( "one" => "ten", "two" => "twenty"), // string key/value
64: array("one" => 1, 2 => "two", 4 => "four"), //mixed
65:
66: // associative array, containing null/empty/boolean values as key/value
67: /*14*/ array(NULL => "NULL", null => "null", "NULL" => NULL, "null" => null),
68: array(true => "true", false => "false", "false" => false, "true" => true),
69: array("" => "emptyd", '' => 'emptys', "emptyd" => "", 'emptys' => ''),
70: array(1 => '', 2 => "", 3 => NULL, 4 => null, 5 => false, 6 => true),
71: array('' => 1, "" => 2, NULL => 3, null => 4, false => 5, true => 6),
72:
73: // array containing embedded arrays
74: /*15*/ array("str1", "array" => array("hello", 'world'), array(1, 2))
75: );
76:
77: // initialise the second argument
78: $arr2 = array( 1 => "one", 2, "string" => "hello", "array" => array("a", "b", "c"));
79:
80: // loop through each sub array of $arrays and check the behavior of array_merge_recursive()
81: $iterator = 1;
82: foreach($arrays as $arr1) {
83: echo "-- Iteration $iterator --\n";
84:
85: // with default argument
86: echo "-- With default argument --\n";
87: var_dump( array_merge_recursive($arr1) );
88:
89: // with more arguments
90: echo "-- With more arguments --\n";
91: var_dump( array_merge_recursive($arr1, $arr2) );
92:
93: $iterator++;
94: }
95:
96: echo "Done";
97: ?>
98: --EXPECTF--
99: *** Testing array_merge_recursive() : Passing different arrays to $arr1 argument ***
100: -- Iteration 1 --
101: -- With default argument --
102: array(2) {
103: [0]=>
104: int(1)
105: [1]=>
106: int(2)
107: }
108: -- With more arguments --
109: array(6) {
110: [0]=>
111: int(1)
112: [1]=>
113: int(2)
114: [2]=>
115: string(3) "one"
116: [3]=>
117: int(2)
118: ["string"]=>
119: string(5) "hello"
120: ["array"]=>
121: array(3) {
122: [0]=>
123: string(1) "a"
124: [1]=>
125: string(1) "b"
126: [2]=>
127: string(1) "c"
128: }
129: }
130: -- Iteration 2 --
131: -- With default argument --
132: array(2) {
133: [0]=>
134: float(1.1)
135: [1]=>
136: float(2.2)
137: }
138: -- With more arguments --
139: array(6) {
140: [0]=>
141: float(1.1)
142: [1]=>
143: float(2.2)
144: [2]=>
145: string(3) "one"
146: [3]=>
147: int(2)
148: ["string"]=>
149: string(5) "hello"
150: ["array"]=>
151: array(3) {
152: [0]=>
153: string(1) "a"
154: [1]=>
155: string(1) "b"
156: [2]=>
157: string(1) "c"
158: }
159: }
160: -- Iteration 3 --
161: -- With default argument --
162: array(2) {
163: [0]=>
164: bool(false)
165: [1]=>
166: bool(true)
167: }
168: -- With more arguments --
169: array(6) {
170: [0]=>
171: bool(false)
172: [1]=>
173: bool(true)
174: [2]=>
175: string(3) "one"
176: [3]=>
177: int(2)
178: ["string"]=>
179: string(5) "hello"
180: ["array"]=>
181: array(3) {
182: [0]=>
183: string(1) "a"
184: [1]=>
185: string(1) "b"
186: [2]=>
187: string(1) "c"
188: }
189: }
190: -- Iteration 4 --
191: -- With default argument --
192: array(0) {
193: }
194: -- With more arguments --
195: array(4) {
196: [0]=>
197: string(3) "one"
198: [1]=>
199: int(2)
200: ["string"]=>
201: string(5) "hello"
202: ["array"]=>
203: array(3) {
204: [0]=>
205: string(1) "a"
206: [1]=>
207: string(1) "b"
208: [2]=>
209: string(1) "c"
210: }
211: }
212: -- Iteration 5 --
213: -- With default argument --
214: array(1) {
215: [0]=>
216: NULL
217: }
218: -- With more arguments --
219: array(5) {
220: [0]=>
221: NULL
222: [1]=>
223: string(3) "one"
224: [2]=>
225: int(2)
226: ["string"]=>
227: string(5) "hello"
228: ["array"]=>
229: array(3) {
230: [0]=>
231: string(1) "a"
232: [1]=>
233: string(1) "b"
234: [2]=>
235: string(1) "c"
236: }
237: }
238: -- Iteration 6 --
239: -- With default argument --
240: array(4) {
241: [0]=>
242: string(3) "a"
243: [1]=>
244: string(5) "aaaa
"
245: [2]=>
246: string(1) "b"
247: [3]=>
248: string(27) "\[\]\!\@\#$\%\^\&\*\(\)\{\}"
249: }
250: -- With more arguments --
251: array(8) {
252: [0]=>
253: string(3) "a"
254: [1]=>
255: string(5) "aaaa
"
256: [2]=>
257: string(1) "b"
258: [3]=>
259: string(27) "\[\]\!\@\#$\%\^\&\*\(\)\{\}"
260: [4]=>
261: string(3) "one"
262: [5]=>
263: int(2)
264: ["string"]=>
265: string(5) "hello"
266: ["array"]=>
267: array(3) {
268: [0]=>
269: string(1) "a"
270: [1]=>
271: string(1) "b"
272: [2]=>
273: string(1) "c"
274: }
275: }
276: -- Iteration 7 --
277: -- With default argument --
278: array(4) {
279: [0]=>
280: string(5) "a\v\f"
281: [1]=>
282: string(6) "aaaa\r"
283: [2]=>
284: string(1) "b"
285: [3]=>
286: string(28) "\[\]\!\@\#\$\%\^\&\*\(\)\{\}"
287: }
288: -- With more arguments --
289: array(8) {
290: [0]=>
291: string(5) "a\v\f"
292: [1]=>
293: string(6) "aaaa\r"
294: [2]=>
295: string(1) "b"
296: [3]=>
297: string(28) "\[\]\!\@\#\$\%\^\&\*\(\)\{\}"
298: [4]=>
299: string(3) "one"
300: [5]=>
301: int(2)
302: ["string"]=>
303: string(5) "hello"
304: ["array"]=>
305: array(3) {
306: [0]=>
307: string(1) "a"
308: [1]=>
309: string(1) "b"
310: [2]=>
311: string(1) "c"
312: }
313: }
314: -- Iteration 8 --
315: -- With default argument --
316: array(3) {
317: ["h1"]=>
318: string(1) "
319: "
320: ["h2"]=>
321: string(88) "hello world
322: The quick brown fox jumped over;
323: the lazy dog
324: This is a double quoted string"
325: ["h3"]=>
326: string(88) "hello
world
327: 1111 != 2222
328: heredoc
329: double quoted string. withdifferentwhitespaces"
330: }
331: -- With more arguments --
332: array(7) {
333: ["h1"]=>
334: string(1) "
335: "
336: ["h2"]=>
337: string(88) "hello world
338: The quick brown fox jumped over;
339: the lazy dog
340: This is a double quoted string"
341: ["h3"]=>
342: string(88) "hello
world
343: 1111 != 2222
344: heredoc
345: double quoted string. withdifferentwhitespaces"
346: [0]=>
347: string(3) "one"
348: [1]=>
349: int(2)
350: ["string"]=>
351: string(5) "hello"
352: ["array"]=>
353: array(3) {
354: [0]=>
355: string(1) "a"
356: [1]=>
357: string(1) "b"
358: [2]=>
359: string(1) "c"
360: }
361: }
362: -- Iteration 9 --
363: -- With default argument --
364: array(2) {
365: [0]=>
366: string(3) "one"
367: [1]=>
368: string(3) "two"
369: }
370: -- With more arguments --
371: array(6) {
372: [0]=>
373: string(3) "one"
374: [1]=>
375: string(3) "two"
376: [2]=>
377: string(3) "one"
378: [3]=>
379: int(2)
380: ["string"]=>
381: string(5) "hello"
382: ["array"]=>
383: array(3) {
384: [0]=>
385: string(1) "a"
386: [1]=>
387: string(1) "b"
388: [2]=>
389: string(1) "c"
390: }
391: }
392: -- Iteration 10 --
393: -- With default argument --
394: array(3) {
395: ["one"]=>
396: int(1)
397: ["two"]=>
398: int(2)
399: [0]=>
400: int(1)
401: }
402: -- With more arguments --
403: array(7) {
404: ["one"]=>
405: int(1)
406: ["two"]=>
407: int(2)
408: [0]=>
409: int(1)
410: [1]=>
411: string(3) "one"
412: [2]=>
413: int(2)
414: ["string"]=>
415: string(5) "hello"
416: ["array"]=>
417: array(3) {
418: [0]=>
419: string(1) "a"
420: [1]=>
421: string(1) "b"
422: [2]=>
423: string(1) "c"
424: }
425: }
426: -- Iteration 11 --
427: -- With default argument --
428: array(3) {
429: [0]=>
430: int(10)
431: [1]=>
432: int(20)
433: [2]=>
434: int(40)
435: }
436: -- With more arguments --
437: array(7) {
438: [0]=>
439: int(10)
440: [1]=>
441: int(20)
442: [2]=>
443: int(40)
444: [3]=>
445: string(3) "one"
446: [4]=>
447: int(2)
448: ["string"]=>
449: string(5) "hello"
450: ["array"]=>
451: array(3) {
452: [0]=>
453: string(1) "a"
454: [1]=>
455: string(1) "b"
456: [2]=>
457: string(1) "c"
458: }
459: }
460: -- Iteration 12 --
461: -- With default argument --
462: array(2) {
463: ["one"]=>
464: string(3) "ten"
465: ["two"]=>
466: string(6) "twenty"
467: }
468: -- With more arguments --
469: array(6) {
470: ["one"]=>
471: string(3) "ten"
472: ["two"]=>
473: string(6) "twenty"
474: [0]=>
475: string(3) "one"
476: [1]=>
477: int(2)
478: ["string"]=>
479: string(5) "hello"
480: ["array"]=>
481: array(3) {
482: [0]=>
483: string(1) "a"
484: [1]=>
485: string(1) "b"
486: [2]=>
487: string(1) "c"
488: }
489: }
490: -- Iteration 13 --
491: -- With default argument --
492: array(3) {
493: ["one"]=>
494: int(1)
495: [0]=>
496: string(3) "two"
497: [1]=>
498: string(4) "four"
499: }
500: -- With more arguments --
501: array(7) {
502: ["one"]=>
503: int(1)
504: [0]=>
505: string(3) "two"
506: [1]=>
507: string(4) "four"
508: [2]=>
509: string(3) "one"
510: [3]=>
511: int(2)
512: ["string"]=>
513: string(5) "hello"
514: ["array"]=>
515: array(3) {
516: [0]=>
517: string(1) "a"
518: [1]=>
519: string(1) "b"
520: [2]=>
521: string(1) "c"
522: }
523: }
524: -- Iteration 14 --
525: -- With default argument --
526: array(3) {
527: [""]=>
528: string(4) "null"
529: ["NULL"]=>
530: NULL
531: ["null"]=>
532: NULL
533: }
534: -- With more arguments --
535: array(7) {
536: [""]=>
537: string(4) "null"
538: ["NULL"]=>
539: NULL
540: ["null"]=>
541: NULL
542: [0]=>
543: string(3) "one"
544: [1]=>
545: int(2)
546: ["string"]=>
547: string(5) "hello"
548: ["array"]=>
549: array(3) {
550: [0]=>
551: string(1) "a"
552: [1]=>
553: string(1) "b"
554: [2]=>
555: string(1) "c"
556: }
557: }
558: -- Iteration 15 --
559: -- With default argument --
560: array(4) {
561: [0]=>
562: string(4) "true"
563: [1]=>
564: string(5) "false"
565: ["false"]=>
566: bool(false)
567: ["true"]=>
568: bool(true)
569: }
570: -- With more arguments --
571: array(8) {
572: [0]=>
573: string(4) "true"
574: [1]=>
575: string(5) "false"
576: ["false"]=>
577: bool(false)
578: ["true"]=>
579: bool(true)
580: [2]=>
581: string(3) "one"
582: [3]=>
583: int(2)
584: ["string"]=>
585: string(5) "hello"
586: ["array"]=>
587: array(3) {
588: [0]=>
589: string(1) "a"
590: [1]=>
591: string(1) "b"
592: [2]=>
593: string(1) "c"
594: }
595: }
596: -- Iteration 16 --
597: -- With default argument --
598: array(3) {
599: [""]=>
600: string(6) "emptys"
601: ["emptyd"]=>
602: string(0) ""
603: ["emptys"]=>
604: string(0) ""
605: }
606: -- With more arguments --
607: array(7) {
608: [""]=>
609: string(6) "emptys"
610: ["emptyd"]=>
611: string(0) ""
612: ["emptys"]=>
613: string(0) ""
614: [0]=>
615: string(3) "one"
616: [1]=>
617: int(2)
618: ["string"]=>
619: string(5) "hello"
620: ["array"]=>
621: array(3) {
622: [0]=>
623: string(1) "a"
624: [1]=>
625: string(1) "b"
626: [2]=>
627: string(1) "c"
628: }
629: }
630: -- Iteration 17 --
631: -- With default argument --
632: array(6) {
633: [0]=>
634: string(0) ""
635: [1]=>
636: string(0) ""
637: [2]=>
638: NULL
639: [3]=>
640: NULL
641: [4]=>
642: bool(false)
643: [5]=>
644: bool(true)
645: }
646: -- With more arguments --
647: array(10) {
648: [0]=>
649: string(0) ""
650: [1]=>
651: string(0) ""
652: [2]=>
653: NULL
654: [3]=>
655: NULL
656: [4]=>
657: bool(false)
658: [5]=>
659: bool(true)
660: [6]=>
661: string(3) "one"
662: [7]=>
663: int(2)
664: ["string"]=>
665: string(5) "hello"
666: ["array"]=>
667: array(3) {
668: [0]=>
669: string(1) "a"
670: [1]=>
671: string(1) "b"
672: [2]=>
673: string(1) "c"
674: }
675: }
676: -- Iteration 18 --
677: -- With default argument --
678: array(3) {
679: [""]=>
680: int(4)
681: [0]=>
682: int(5)
683: [1]=>
684: int(6)
685: }
686: -- With more arguments --
687: array(7) {
688: [""]=>
689: int(4)
690: [0]=>
691: int(5)
692: [1]=>
693: int(6)
694: [2]=>
695: string(3) "one"
696: [3]=>
697: int(2)
698: ["string"]=>
699: string(5) "hello"
700: ["array"]=>
701: array(3) {
702: [0]=>
703: string(1) "a"
704: [1]=>
705: string(1) "b"
706: [2]=>
707: string(1) "c"
708: }
709: }
710: -- Iteration 19 --
711: -- With default argument --
712: array(3) {
713: [0]=>
714: string(4) "str1"
715: ["array"]=>
716: array(2) {
717: [0]=>
718: string(5) "hello"
719: [1]=>
720: string(5) "world"
721: }
722: [1]=>
723: array(2) {
724: [0]=>
725: int(1)
726: [1]=>
727: int(2)
728: }
729: }
730: -- With more arguments --
731: array(6) {
732: [0]=>
733: string(4) "str1"
734: ["array"]=>
735: array(5) {
736: [0]=>
737: string(5) "hello"
738: [1]=>
739: string(5) "world"
740: [2]=>
741: string(1) "a"
742: [3]=>
743: string(1) "b"
744: [4]=>
745: string(1) "c"
746: }
747: [1]=>
748: array(2) {
749: [0]=>
750: int(1)
751: [1]=>
752: int(2)
753: }
754: [2]=>
755: string(3) "one"
756: [3]=>
757: int(2)
758: ["string"]=>
759: string(5) "hello"
760: }
761: Done