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