1--TEST--
2Test array_diff_assoc() function : usage variations - strict string comparison check
3--FILE--
4<?php
5/* Prototype  : array array_diff_assoc(array $arr1, array $arr2 [, array ...])
6 * Description: Returns the entries of $arr1 that have values which are not
7 * present in any of the others arguments but do additional checks whether the keys are equal
8 * Source code: ext/standard/array.c
9 */
10
11/*
12 * Test how array_diff_assoc behaves
13 * 1. When comparing an array that has similar elements
14 *    but has been created in a different order
15 * 2. When doing a strict comparison of string representation
16 */
17
18echo "*** Testing array_diff_assoc() : usage variations ***\n";
19
20$array = array ('zero',
21                1 => 1,
22                'two' => 2.00000000000001);
23
24$inputs = array (
25
26//default keys => string values
27/*1*/	array('2.00000000000001', '1', 'zero', 'a'),
28
29//numeric keys => string values
30/*2*/	array(2 => '2.00000000000001',
31	          1 => '1',
32	          0 => 'zero',
33	          3 => 'a'),
34
35//string keys => string values
36/*3*/	array('2' => '2.00000000000001',
37	          '1' => '1',
38	          '0' => 'zero',
39	          '3' => 'a') ,
40
41//default keys => numeric values
42/*4*/	array(2, 1, 0),
43
44//numeric keys => numeric values
45/*5*/	array(2 => 2,
46	          1 => 1,
47	          0 => 0),
48
49//string keys => numeric values
50/*6*/	array('two' => 2,
51	          '1' => 1,
52	          '0' => 0),
53
54//defualt keys => float values
55/*7*/	array(2.00000000000001, 1.00, 0.01E-9),
56
57//numeric keys => float values
58/*8*/	array(2 => 2.00000000000001,
59	          1 =>  1.00,
60	          0 => 0.01E-9),
61
62//string keys => float values
63/*9*/	array ('two' => 2.00000000000001,
64	           '1' => 1.00,
65	           '0' =>0.01E-9)
66);
67
68// loop through each element of $inputs to check the behavior of array_diff_assoc
69$iterator = 1;
70foreach($inputs as $input) {
71  echo "\n-- Iteration $iterator --\n";
72  var_dump(array_diff_assoc($array, $input));
73  var_dump(array_diff_assoc($input, $array));
74  $iterator++;
75};
76echo "Done";
77?>
78--EXPECTF--
79*** Testing array_diff_assoc() : usage variations ***
80
81-- Iteration 1 --
82array(2) {
83  [0]=>
84  string(4) "zero"
85  ["two"]=>
86  float(2)
87}
88array(3) {
89  [0]=>
90  string(16) "2.00000000000001"
91  [2]=>
92  string(4) "zero"
93  [3]=>
94  string(1) "a"
95}
96
97-- Iteration 2 --
98array(1) {
99  ["two"]=>
100  float(2)
101}
102array(2) {
103  [2]=>
104  string(16) "2.00000000000001"
105  [3]=>
106  string(1) "a"
107}
108
109-- Iteration 3 --
110array(1) {
111  ["two"]=>
112  float(2)
113}
114array(2) {
115  [2]=>
116  string(16) "2.00000000000001"
117  [3]=>
118  string(1) "a"
119}
120
121-- Iteration 4 --
122array(2) {
123  [0]=>
124  string(4) "zero"
125  ["two"]=>
126  float(2)
127}
128array(2) {
129  [0]=>
130  int(2)
131  [2]=>
132  int(0)
133}
134
135-- Iteration 5 --
136array(2) {
137  [0]=>
138  string(4) "zero"
139  ["two"]=>
140  float(2)
141}
142array(2) {
143  [2]=>
144  int(2)
145  [0]=>
146  int(0)
147}
148
149-- Iteration 6 --
150array(1) {
151  [0]=>
152  string(4) "zero"
153}
154array(1) {
155  [0]=>
156  int(0)
157}
158
159-- Iteration 7 --
160array(2) {
161  [0]=>
162  string(4) "zero"
163  ["two"]=>
164  float(2)
165}
166array(2) {
167  [0]=>
168  float(2)
169  [2]=>
170  float(1.0E-11)
171}
172
173-- Iteration 8 --
174array(2) {
175  [0]=>
176  string(4) "zero"
177  ["two"]=>
178  float(2)
179}
180array(2) {
181  [2]=>
182  float(2)
183  [0]=>
184  float(1.0E-11)
185}
186
187-- Iteration 9 --
188array(1) {
189  [0]=>
190  string(4) "zero"
191}
192array(1) {
193  [0]=>
194  float(1.0E-11)
195}
196Done