1--TEST--
2Test array_merge_recursive() function : usage variations - associative array with different values
3--FILE--
4<?php
5/*
6 * Testing the functionality of array_merge_recursive() by passing different
7 * associative arrays having different values to $arr1 argument.
8*/
9
10echo "*** Testing array_merge_recursive() : assoc. array with diff. values to \$arr1 argument ***\n";
11
12// get an unset variable
13$unset_var = 10;
14unset ($unset_var);
15
16// get a resource variable
17$fp = fopen(__FILE__, "r");
18
19// get a class
20class classA
21{
22  public function __toString(){
23    return "Class A object";
24  }
25}
26
27// get a heredoc string
28$heredoc = <<<EOT
29Hello world
30EOT;
31
32// different associative arrays to be passed to $arr1 argument
33$arrays = array (
34// arrays with integer values
35/*1*/  array('0' => 0, '1' => 0),
36       array("one" => 1, 'two' => 2, "three" => 1, 4 => 1),
37
38       // arrays with float values
39/*3*/  array("f1" => 2.3333, "f2" => 2.3333, "f3" => array(1.1, 2.22)),
40       array("f1" => 1.2, 'f2' => 3.33, 3 => 4.89999922839999, 'f4' => array(1.2, 'f4' => 1.2)),
41
42       // arrays with string values
43/*5*/  array(111 => "\tHello", "array" => "col\tor", 2 => "\v\fworld", 3.3 =>  "\tHello"),
44       array(111 => '\tHello', 'array' => 'col\tor', 2 => '\v\fworld', 3.3 =>  '\tHello'),
45       array(1 => "hello", "string" => $heredoc, $heredoc),
46
47       // array with object, unset variable and resource variable
48/*8*/  array(11 => new classA(), "string" => @$unset_var, "resource" => $fp, new classA(), $fp),
49);
50
51// initialise the second array
52$arr2 = array( 1 => "one", 2, "string" => "hello", "array" => array("a", "b", "c"));
53
54// loop through each sub array of $arrays and check the behavior of array_merge_recursive()
55$iterator = 1;
56foreach($arrays as $arr1) {
57  echo "-- Iteration $iterator --\n";
58
59  // with default argument
60  echo "-- With default argument --\n";
61  var_dump( array_merge_recursive($arr1) );
62
63  // with more arguments
64  echo "-- With more arguments --\n";
65  var_dump( array_merge_recursive($arr1, $arr2) );
66
67  $iterator++;
68}
69
70// close the file resource used
71fclose($fp);
72
73echo "Done";
74?>
75--EXPECTF--
76*** Testing array_merge_recursive() : assoc. array with diff. values to $arr1 argument ***
77-- Iteration 1 --
78-- With default argument --
79array(2) {
80  [0]=>
81  int(0)
82  [1]=>
83  int(0)
84}
85-- With more arguments --
86array(6) {
87  [0]=>
88  int(0)
89  [1]=>
90  int(0)
91  [2]=>
92  string(3) "one"
93  [3]=>
94  int(2)
95  ["string"]=>
96  string(5) "hello"
97  ["array"]=>
98  array(3) {
99    [0]=>
100    string(1) "a"
101    [1]=>
102    string(1) "b"
103    [2]=>
104    string(1) "c"
105  }
106}
107-- Iteration 2 --
108-- With default argument --
109array(4) {
110  ["one"]=>
111  int(1)
112  ["two"]=>
113  int(2)
114  ["three"]=>
115  int(1)
116  [0]=>
117  int(1)
118}
119-- With more arguments --
120array(8) {
121  ["one"]=>
122  int(1)
123  ["two"]=>
124  int(2)
125  ["three"]=>
126  int(1)
127  [0]=>
128  int(1)
129  [1]=>
130  string(3) "one"
131  [2]=>
132  int(2)
133  ["string"]=>
134  string(5) "hello"
135  ["array"]=>
136  array(3) {
137    [0]=>
138    string(1) "a"
139    [1]=>
140    string(1) "b"
141    [2]=>
142    string(1) "c"
143  }
144}
145-- Iteration 3 --
146-- With default argument --
147array(3) {
148  ["f1"]=>
149  float(2.3333)
150  ["f2"]=>
151  float(2.3333)
152  ["f3"]=>
153  array(2) {
154    [0]=>
155    float(1.1)
156    [1]=>
157    float(2.22)
158  }
159}
160-- With more arguments --
161array(7) {
162  ["f1"]=>
163  float(2.3333)
164  ["f2"]=>
165  float(2.3333)
166  ["f3"]=>
167  array(2) {
168    [0]=>
169    float(1.1)
170    [1]=>
171    float(2.22)
172  }
173  [0]=>
174  string(3) "one"
175  [1]=>
176  int(2)
177  ["string"]=>
178  string(5) "hello"
179  ["array"]=>
180  array(3) {
181    [0]=>
182    string(1) "a"
183    [1]=>
184    string(1) "b"
185    [2]=>
186    string(1) "c"
187  }
188}
189-- Iteration 4 --
190-- With default argument --
191array(4) {
192  ["f1"]=>
193  float(1.2)
194  ["f2"]=>
195  float(3.33)
196  [0]=>
197  float(4.89999922839999)
198  ["f4"]=>
199  array(2) {
200    [0]=>
201    float(1.2)
202    ["f4"]=>
203    float(1.2)
204  }
205}
206-- With more arguments --
207array(8) {
208  ["f1"]=>
209  float(1.2)
210  ["f2"]=>
211  float(3.33)
212  [0]=>
213  float(4.89999922839999)
214  ["f4"]=>
215  array(2) {
216    [0]=>
217    float(1.2)
218    ["f4"]=>
219    float(1.2)
220  }
221  [1]=>
222  string(3) "one"
223  [2]=>
224  int(2)
225  ["string"]=>
226  string(5) "hello"
227  ["array"]=>
228  array(3) {
229    [0]=>
230    string(1) "a"
231    [1]=>
232    string(1) "b"
233    [2]=>
234    string(1) "c"
235  }
236}
237-- Iteration 5 --
238-- With default argument --
239array(4) {
240  [0]=>
241  string(6) "	Hello"
242  ["array"]=>
243  string(6) "col	or"
244  [1]=>
245  string(7) "world"
246  [2]=>
247  string(6) "	Hello"
248}
249-- With more arguments --
250array(7) {
251  [0]=>
252  string(6) "	Hello"
253  ["array"]=>
254  array(4) {
255    [0]=>
256    string(6) "col	or"
257    [1]=>
258    string(1) "a"
259    [2]=>
260    string(1) "b"
261    [3]=>
262    string(1) "c"
263  }
264  [1]=>
265  string(7) "world"
266  [2]=>
267  string(6) "	Hello"
268  [3]=>
269  string(3) "one"
270  [4]=>
271  int(2)
272  ["string"]=>
273  string(5) "hello"
274}
275-- Iteration 6 --
276-- With default argument --
277array(4) {
278  [0]=>
279  string(7) "\tHello"
280  ["array"]=>
281  string(7) "col\tor"
282  [1]=>
283  string(9) "\v\fworld"
284  [2]=>
285  string(7) "\tHello"
286}
287-- With more arguments --
288array(7) {
289  [0]=>
290  string(7) "\tHello"
291  ["array"]=>
292  array(4) {
293    [0]=>
294    string(7) "col\tor"
295    [1]=>
296    string(1) "a"
297    [2]=>
298    string(1) "b"
299    [3]=>
300    string(1) "c"
301  }
302  [1]=>
303  string(9) "\v\fworld"
304  [2]=>
305  string(7) "\tHello"
306  [3]=>
307  string(3) "one"
308  [4]=>
309  int(2)
310  ["string"]=>
311  string(5) "hello"
312}
313-- Iteration 7 --
314-- With default argument --
315array(3) {
316  [0]=>
317  string(5) "hello"
318  ["string"]=>
319  string(11) "Hello world"
320  [1]=>
321  string(11) "Hello world"
322}
323-- With more arguments --
324array(6) {
325  [0]=>
326  string(5) "hello"
327  ["string"]=>
328  array(2) {
329    [0]=>
330    string(11) "Hello world"
331    [1]=>
332    string(5) "hello"
333  }
334  [1]=>
335  string(11) "Hello world"
336  [2]=>
337  string(3) "one"
338  [3]=>
339  int(2)
340  ["array"]=>
341  array(3) {
342    [0]=>
343    string(1) "a"
344    [1]=>
345    string(1) "b"
346    [2]=>
347    string(1) "c"
348  }
349}
350-- Iteration 8 --
351-- With default argument --
352array(5) {
353  [0]=>
354  object(classA)#%d (0) {
355  }
356  ["string"]=>
357  NULL
358  ["resource"]=>
359  resource(%d) of type (stream)
360  [1]=>
361  object(classA)#%d (0) {
362  }
363  [2]=>
364  resource(%d) of type (stream)
365}
366-- With more arguments --
367array(8) {
368  [0]=>
369  object(classA)#%d (0) {
370  }
371  ["string"]=>
372  array(2) {
373    [0]=>
374    NULL
375    [1]=>
376    string(5) "hello"
377  }
378  ["resource"]=>
379  resource(%d) of type (stream)
380  [1]=>
381  object(classA)#%d (0) {
382  }
383  [2]=>
384  resource(%d) of type (stream)
385  [3]=>
386  string(3) "one"
387  [4]=>
388  int(2)
389  ["array"]=>
390  array(3) {
391    [0]=>
392    string(1) "a"
393    [1]=>
394    string(1) "b"
395    [2]=>
396    string(1) "c"
397  }
398}
399Done
400