1--TEST--
2Test array_diff_assoc() function : usage variations - arrays with different data types as keys
3--FILE--
4
5<?php
6/* Prototype  : array array_diff_assoc(array $arr1, array $arr2 [, array ...])
7 * Description: Returns the entries of arr1 that have values which are not present
8 * in any of the others arguments but do additional checks whether the keys are equal
9 * Source code: ext/standard/array.c
10 */
11
12/*
13 * Test how array_diff_assoc() compares arrays containing different data types
14 * as keys
15 */
16
17echo "\n*** Testing array_diff_assoc() : usage variations ***\n";
18
19$array = array(1, 2, 3);
20
21//get an unset variable
22$unset_var = 10;
23unset ($unset_var);
24
25// heredoc string
26$heredoc = <<<EOT
27hello world
28EOT;
29
30//Different data types as keys to be passed to $arr1 argument
31$inputs = array(
32
33       // int data
34/*1*/
35'int' => array(
36       0 => 'zero',
37       1 => 'one',
38       12345 => 'positive',
39       -2345 => 'negative'),
40
41       // float data
42/*2*/
43'float' => array(
44       10.5 => 'float 1',
45       -10.5 => 'float 2',
46       .5 => 'float 3'),
47
48       // null data
49/*3*/
50'null' => array(
51       NULL => 'null 1',
52       null => 'null 2'),
53
54       // boolean data
55/*4*/
56'bool' => array(
57       true => 'boolt',
58       false => 'boolf',
59       TRUE => 'boolT',
60       FALSE => 'boolF'),
61
62       // empty data
63/*5*/
64'empty' => array(
65      "" => 'emptyd',
66      '' => 'emptys'),
67
68       // string data
69/*6*/
70'string' => array(
71      "string" => 'stringd',
72      'string' => 'strings',
73      $heredoc => 'stringh'),
74
75       // binary data
76/*7*/
77'binary' => array(
78      b"binary1" => 'binary 1',
79	  (binary)"binary2" => 'binary 2'),
80
81       // undefined data
82/*8*/
83'undefined' => array(
84      @$undefined_var => 'undefined'),
85
86       // unset data
87/*9*/
88'unset' => array(
89      @$unset_var => 'unset'),
90
91);
92
93// loop through each element of $inputs to check the behavior of array_diff_assoc
94$iterator = 1;
95foreach($inputs as $key => $input) {
96  echo "\n-- Iteration $iterator --\n";
97  var_dump( array_diff_assoc($input, $array));
98  $iterator++;
99};
100
101echo "Done";
102?>
103
104--EXPECTF--
105
106*** Testing array_diff_assoc() : usage variations ***
107
108-- Iteration 1 --
109array(4) {
110  [0]=>
111  string(4) "zero"
112  [1]=>
113  string(3) "one"
114  [12345]=>
115  string(8) "positive"
116  [-2345]=>
117  string(8) "negative"
118}
119
120-- Iteration 2 --
121array(3) {
122  [10]=>
123  string(7) "float 1"
124  [-10]=>
125  string(7) "float 2"
126  [0]=>
127  string(7) "float 3"
128}
129
130-- Iteration 3 --
131array(1) {
132  [""]=>
133  string(6) "null 2"
134}
135
136-- Iteration 4 --
137array(2) {
138  [1]=>
139  string(5) "boolT"
140  [0]=>
141  string(5) "boolF"
142}
143
144-- Iteration 5 --
145array(1) {
146  [""]=>
147  string(6) "emptys"
148}
149
150-- Iteration 6 --
151array(2) {
152  ["string"]=>
153  string(7) "strings"
154  ["hello world"]=>
155  string(7) "stringh"
156}
157
158-- Iteration 7 --
159array(2) {
160  ["binary1"]=>
161  string(8) "binary 1"
162  ["binary2"]=>
163  string(8) "binary 2"
164}
165
166-- Iteration 8 --
167array(1) {
168  [""]=>
169  string(9) "undefined"
170}
171
172-- Iteration 9 --
173array(1) {
174  [""]=>
175  string(5) "unset"
176}
177Done