xref: /PHP-7.3/ext/standard/tests/array/007.phpt (revision db76b708)
1--TEST--
2Test array_diff and array_diff_assoc behaviour
3--FILE--
4<?php
5$a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
6$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
7$c = array(-1,1);
8echo '$a='.var_export($a,TRUE).";\n";
9echo '$b='.var_export($b,TRUE).";\n";
10echo '$c='.var_export($c,TRUE).";\n";
11var_dump(array_diff($a,$b,$c));
12var_dump(array_diff_assoc($a,$b,$c));
13$a = array(
14'a'=>2,
15'b'=>'some',
16'c'=>'done',
17'z'=>'foo',
18'f'=>5,
19'fan'=>'fen',
207=>18,
219=>25,
2211=>42,
2312=>42,
2445=>42,
2573=>'foo',
2695=>'some',
27'som3'=>'some',
28'want'=>'wanna');
29$b = array(
30'a'=>7,
317=>18,
329=>13,
3311=>42,
3445=>46,
35'som3'=>'some',
36'foo'=>'some',
37'goo'=>'foo',
38'f'=>5,
39'z'=>'equal'
40);
41$c = array(
4273=>'foo',
4395=>'some');
44echo '$a='.var_export($a,TRUE).";\n";
45echo '$b='.var_export($b,TRUE).";\n";
46echo '$c='.var_export($c,TRUE).";\n";
47echo "Results:\n\n";
48var_dump(array_diff($a,$b,$c));
49var_dump(array_diff_assoc($a,$b,$c));
50
51echo "-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-\n";
52error_reporting(E_ALL);
53class cr {
54	private $priv_member;
55	public  $public_member;
56	function __construct($val) {
57		$this->priv_member = $val;
58		$this->public_member = $val;
59	}
60	static function comp_func_cr($a, $b) {
61		if ($a->priv_member === $b->priv_member) return 0;
62		return ($a->priv_member > $b->priv_member)? 1:-1;
63	}
64}
65
66function comp_func($a, $b) {
67	if ($a === $b) return 0;
68	return ($a > $b)? 1:-1;
69
70}
71
72function comp_func_cr($a, $b) {
73	if ($a->public_member === $b->public_member) return 0;
74	return ($a->public_member > $b->public_member)? 1:-1;
75}
76
77
78/*
79$a = array(1,"big"=>2,3,6,3,5,3,3,3,3,3,3,3,3,3,3);
80$b = array(2,2,3,3,3,3,3,3,3,3,3,3,3,3,3);
81$c = array(-1,1);
82echo '$a='.var_export($a,TRUE).";\n";
83echo '$b='.var_export($b,TRUE).";\n";
84echo '$c='.var_export($c,TRUE).";\n";
85var_dump(array_diff($a,$b,$c));
86var_dump(array_diff_assoc($a,$b,$c));
87var_dump(array_udiff($a, $b, $c, "comp_func"));
88var_dump(array_diff_uassoc($a,$b,$c, "comp_func"));
89*/
90
91/*
92 $a = array(new cr(9),new cr(12),new cr(23),new cr(4),new cr(-15),);
93 $b = array(new cr(9),new cr(22),new cr( 3),new cr(4),new cr(-15),);
94 var_dump(array_udiff($a, $b, "comp_func_cr"));
95*/
96$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
97$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr( 3), 1=> new cr(4), 2 => new cr(-15),);
98
99echo '$a='.var_export($a,TRUE).";\n";
100echo '$b='.var_export($b,TRUE).";\n";
101echo 'var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));'."\n";
102var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
103
104
105echo '$a='.var_export($a,TRUE).";\n";
106echo '$b='.var_export($b,TRUE).";\n";
107echo 'var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));'."\n";
108var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
109
110
111echo '$a='.var_export($a,TRUE).";\n";
112echo '$b='.var_export($b,TRUE).";\n";
113echo 'var_dump(array_udiff($a, $b, "comp_func_cr"));'."\n";
114var_dump(array_udiff($a, $b, "comp_func_cr"));
115
116
117echo '$a='.var_export($a,TRUE).";\n";
118echo '$b='.var_export($b,TRUE).";\n";
119echo 'var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));'."\n";
120var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
121
122?>
123--EXPECTF--
124$a=array (
125  0 => 1,
126  'big' => 2,
127  1 => 3,
128  2 => 6,
129  3 => 3,
130  4 => 5,
131  5 => 3,
132  6 => 3,
133  7 => 3,
134  8 => 3,
135  9 => 3,
136  10 => 3,
137  11 => 3,
138  12 => 3,
139  13 => 3,
140  14 => 3,
141);
142$b=array (
143  0 => 2,
144  1 => 2,
145  2 => 3,
146  3 => 3,
147  4 => 3,
148  5 => 3,
149  6 => 3,
150  7 => 3,
151  8 => 3,
152  9 => 3,
153  10 => 3,
154  11 => 3,
155  12 => 3,
156  13 => 3,
157  14 => 3,
158);
159$c=array (
160  0 => -1,
161  1 => 1,
162);
163array(2) {
164  [2]=>
165  int(6)
166  [4]=>
167  int(5)
168}
169array(5) {
170  [0]=>
171  int(1)
172  ["big"]=>
173  int(2)
174  [1]=>
175  int(3)
176  [2]=>
177  int(6)
178  [4]=>
179  int(5)
180}
181$a=array (
182  'a' => 2,
183  'b' => 'some',
184  'c' => 'done',
185  'z' => 'foo',
186  'f' => 5,
187  'fan' => 'fen',
188  7 => 18,
189  9 => 25,
190  11 => 42,
191  12 => 42,
192  45 => 42,
193  73 => 'foo',
194  95 => 'some',
195  'som3' => 'some',
196  'want' => 'wanna',
197);
198$b=array (
199  'a' => 7,
200  7 => 18,
201  9 => 13,
202  11 => 42,
203  45 => 46,
204  'som3' => 'some',
205  'foo' => 'some',
206  'goo' => 'foo',
207  'f' => 5,
208  'z' => 'equal',
209);
210$c=array (
211  73 => 'foo',
212  95 => 'some',
213);
214Results:
215
216array(5) {
217  ["a"]=>
218  int(2)
219  ["c"]=>
220  string(4) "done"
221  ["fan"]=>
222  string(3) "fen"
223  [9]=>
224  int(25)
225  ["want"]=>
226  string(5) "wanna"
227}
228array(9) {
229  ["a"]=>
230  int(2)
231  ["b"]=>
232  string(4) "some"
233  ["c"]=>
234  string(4) "done"
235  ["z"]=>
236  string(3) "foo"
237  ["fan"]=>
238  string(3) "fen"
239  [9]=>
240  int(25)
241  [12]=>
242  int(42)
243  [45]=>
244  int(42)
245  ["want"]=>
246  string(5) "wanna"
247}
248-=-=-=-=-=-=-=-=- New functionality from 5.0.0 -=-=-=-=-=-=-=-
249$a=array (
250  '0.1' =>
251  cr::__set_state(array(
252     'priv_member' => 9,
253     'public_member' => 9,
254  )),
255  '0.5' =>
256  cr::__set_state(array(
257     'priv_member' => 12,
258     'public_member' => 12,
259  )),
260  0 =>
261  cr::__set_state(array(
262     'priv_member' => 23,
263     'public_member' => 23,
264  )),
265  1 =>
266  cr::__set_state(array(
267     'priv_member' => 4,
268     'public_member' => 4,
269  )),
270  2 =>
271  cr::__set_state(array(
272     'priv_member' => -15,
273     'public_member' => -15,
274  )),
275);
276$b=array (
277  '0.2' =>
278  cr::__set_state(array(
279     'priv_member' => 9,
280     'public_member' => 9,
281  )),
282  '0.5' =>
283  cr::__set_state(array(
284     'priv_member' => 22,
285     'public_member' => 22,
286  )),
287  0 =>
288  cr::__set_state(array(
289     'priv_member' => 3,
290     'public_member' => 3,
291  )),
292  1 =>
293  cr::__set_state(array(
294     'priv_member' => 4,
295     'public_member' => 4,
296  )),
297  2 =>
298  cr::__set_state(array(
299     'priv_member' => -15,
300     'public_member' => -15,
301  )),
302);
303var_dump(array_udiff_uassoc($a, $b, "comp_func_cr", "comp_func"));
304array(3) {
305  ["0.1"]=>
306  object(cr)#%d (2) {
307    ["priv_member":"cr":private]=>
308    int(9)
309    ["public_member"]=>
310    int(9)
311  }
312  ["0.5"]=>
313  object(cr)#%d (2) {
314    ["priv_member":"cr":private]=>
315    int(12)
316    ["public_member"]=>
317    int(12)
318  }
319  [0]=>
320  object(cr)#%d (2) {
321    ["priv_member":"cr":private]=>
322    int(23)
323    ["public_member"]=>
324    int(23)
325  }
326}
327$a=array (
328  '0.1' =>
329  cr::__set_state(array(
330     'priv_member' => 9,
331     'public_member' => 9,
332  )),
333  '0.5' =>
334  cr::__set_state(array(
335     'priv_member' => 12,
336     'public_member' => 12,
337  )),
338  0 =>
339  cr::__set_state(array(
340     'priv_member' => 23,
341     'public_member' => 23,
342  )),
343  1 =>
344  cr::__set_state(array(
345     'priv_member' => 4,
346     'public_member' => 4,
347  )),
348  2 =>
349  cr::__set_state(array(
350     'priv_member' => -15,
351     'public_member' => -15,
352  )),
353);
354$b=array (
355  '0.2' =>
356  cr::__set_state(array(
357     'priv_member' => 9,
358     'public_member' => 9,
359  )),
360  '0.5' =>
361  cr::__set_state(array(
362     'priv_member' => 22,
363     'public_member' => 22,
364  )),
365  0 =>
366  cr::__set_state(array(
367     'priv_member' => 3,
368     'public_member' => 3,
369  )),
370  1 =>
371  cr::__set_state(array(
372     'priv_member' => 4,
373     'public_member' => 4,
374  )),
375  2 =>
376  cr::__set_state(array(
377     'priv_member' => -15,
378     'public_member' => -15,
379  )),
380);
381var_dump(array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), "comp_func"));
382array(3) {
383  ["0.1"]=>
384  object(cr)#%d (2) {
385    ["priv_member":"cr":private]=>
386    int(9)
387    ["public_member"]=>
388    int(9)
389  }
390  ["0.5"]=>
391  object(cr)#%d (2) {
392    ["priv_member":"cr":private]=>
393    int(12)
394    ["public_member"]=>
395    int(12)
396  }
397  [0]=>
398  object(cr)#%d (2) {
399    ["priv_member":"cr":private]=>
400    int(23)
401    ["public_member"]=>
402    int(23)
403  }
404}
405$a=array (
406  '0.1' =>
407  cr::__set_state(array(
408     'priv_member' => 9,
409     'public_member' => 9,
410  )),
411  '0.5' =>
412  cr::__set_state(array(
413     'priv_member' => 12,
414     'public_member' => 12,
415  )),
416  0 =>
417  cr::__set_state(array(
418     'priv_member' => 23,
419     'public_member' => 23,
420  )),
421  1 =>
422  cr::__set_state(array(
423     'priv_member' => 4,
424     'public_member' => 4,
425  )),
426  2 =>
427  cr::__set_state(array(
428     'priv_member' => -15,
429     'public_member' => -15,
430  )),
431);
432$b=array (
433  '0.2' =>
434  cr::__set_state(array(
435     'priv_member' => 9,
436     'public_member' => 9,
437  )),
438  '0.5' =>
439  cr::__set_state(array(
440     'priv_member' => 22,
441     'public_member' => 22,
442  )),
443  0 =>
444  cr::__set_state(array(
445     'priv_member' => 3,
446     'public_member' => 3,
447  )),
448  1 =>
449  cr::__set_state(array(
450     'priv_member' => 4,
451     'public_member' => 4,
452  )),
453  2 =>
454  cr::__set_state(array(
455     'priv_member' => -15,
456     'public_member' => -15,
457  )),
458);
459var_dump(array_udiff($a, $b, "comp_func_cr"));
460array(2) {
461  ["0.5"]=>
462  object(cr)#%d (2) {
463    ["priv_member":"cr":private]=>
464    int(12)
465    ["public_member"]=>
466    int(12)
467  }
468  [0]=>
469  object(cr)#%d (2) {
470    ["priv_member":"cr":private]=>
471    int(23)
472    ["public_member"]=>
473    int(23)
474  }
475}
476$a=array (
477  '0.1' =>
478  cr::__set_state(array(
479     'priv_member' => 9,
480     'public_member' => 9,
481  )),
482  '0.5' =>
483  cr::__set_state(array(
484     'priv_member' => 12,
485     'public_member' => 12,
486  )),
487  0 =>
488  cr::__set_state(array(
489     'priv_member' => 23,
490     'public_member' => 23,
491  )),
492  1 =>
493  cr::__set_state(array(
494     'priv_member' => 4,
495     'public_member' => 4,
496  )),
497  2 =>
498  cr::__set_state(array(
499     'priv_member' => -15,
500     'public_member' => -15,
501  )),
502);
503$b=array (
504  '0.2' =>
505  cr::__set_state(array(
506     'priv_member' => 9,
507     'public_member' => 9,
508  )),
509  '0.5' =>
510  cr::__set_state(array(
511     'priv_member' => 22,
512     'public_member' => 22,
513  )),
514  0 =>
515  cr::__set_state(array(
516     'priv_member' => 3,
517     'public_member' => 3,
518  )),
519  1 =>
520  cr::__set_state(array(
521     'priv_member' => 4,
522     'public_member' => 4,
523  )),
524  2 =>
525  cr::__set_state(array(
526     'priv_member' => -15,
527     'public_member' => -15,
528  )),
529);
530var_dump(array_udiff_assoc($a, $b, "comp_func_cr"));
531array(3) {
532  ["0.1"]=>
533  object(cr)#%d (2) {
534    ["priv_member":"cr":private]=>
535    int(9)
536    ["public_member"]=>
537    int(9)
538  }
539  ["0.5"]=>
540  object(cr)#%d (2) {
541    ["priv_member":"cr":private]=>
542    int(12)
543    ["public_member"]=>
544    int(12)
545  }
546  [0]=>
547  object(cr)#%d (2) {
548    ["priv_member":"cr":private]=>
549    int(23)
550    ["public_member"]=>
551    int(23)
552  }
553}
554