1--TEST-- 2Test array_diff_assoc() function : variation - array containing different data types 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 present 7 * 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() compares indexed arrays containing different data types 13 */ 14 15echo "\n*** Testing array_diff_assoc() : usage variations ***\n"; 16 17$array = array(1, 2, 3); 18 19//get an unset variable 20$unset_var = 10; 21unset ($unset_var); 22 23// get a class 24class classA 25{ 26 public function __toString() { 27 return "Class A object"; 28 } 29} 30 31// heredoc string 32$heredoc = <<<EOT 33hello world 34EOT; 35 36//array of different data types to be passed to $arr1 argument 37$inputs = array( 38 39 // int data 40/*1*/ 41'int' => array( 42 0, 43 1, 44 12345, 45 -2345), 46 47 // float data 48/*2*/ 49'float' => array( 50 10.5, 51 -10.5, 52 12.3456789000e10, 53 12.3456789000E-10, 54 .5), 55 56 // null data 57/*3*/ 58'null' => array( 59 NULL, 60 null), 61 62 // boolean data 63/*4*/ 64'bool' => array( 65 true, 66 false, 67 TRUE, 68 FALSE), 69 70 // empty data 71/*5*/ 72'empty' => array( 73 "", 74 ''), 75 76 // string data 77/*6*/ 78'string' => array( 79 "string", 80 'string', 81 $heredoc), 82 83 // binary data 84/*7*/ 85'binary' => array( 86 b"binary", 87 (binary)"binary"), 88 89 // object data 90/*8*/ 91'object' => array( 92 new classA()), 93 94 // undefined data 95/*9*/ 96'undefined' => array( 97 @$undefined_var), 98 99 // unset data 100/*10*/ 101'unset' => array( 102 @$unset_var), 103); 104 105// loop through each element of $inputs to check the behavior of array_diff_assoc 106$iterator = 1; 107foreach($inputs as $key => $input) { 108 echo "\n-- Iteration $iterator --\n"; 109 var_dump( array_diff_assoc($input, $array)); 110 $iterator++; 111}; 112echo "Done"; 113?> 114--EXPECTF-- 115 116*** Testing array_diff_assoc() : usage variations *** 117 118-- Iteration 1 -- 119array(4) { 120 [0]=> 121 int(0) 122 [1]=> 123 int(1) 124 [2]=> 125 int(12345) 126 [3]=> 127 int(-2345) 128} 129 130-- Iteration 2 -- 131array(5) { 132 [0]=> 133 float(10.5) 134 [1]=> 135 float(-10.5) 136 [2]=> 137 float(123456789000) 138 [3]=> 139 float(1.23456789E-9) 140 [4]=> 141 float(0.5) 142} 143 144-- Iteration 3 -- 145array(2) { 146 [0]=> 147 NULL 148 [1]=> 149 NULL 150} 151 152-- Iteration 4 -- 153array(3) { 154 [1]=> 155 bool(false) 156 [2]=> 157 bool(true) 158 [3]=> 159 bool(false) 160} 161 162-- Iteration 5 -- 163array(2) { 164 [0]=> 165 string(0) "" 166 [1]=> 167 string(0) "" 168} 169 170-- Iteration 6 -- 171array(3) { 172 [0]=> 173 string(6) "string" 174 [1]=> 175 string(6) "string" 176 [2]=> 177 string(11) "hello world" 178} 179 180-- Iteration 7 -- 181array(2) { 182 [0]=> 183 string(6) "binary" 184 [1]=> 185 string(6) "binary" 186} 187 188-- Iteration 8 -- 189array(1) { 190 [0]=> 191 object(classA)#%d (0) { 192 } 193} 194 195-- Iteration 9 -- 196array(1) { 197 [0]=> 198 NULL 199} 200 201-- Iteration 10 -- 202array(1) { 203 [0]=> 204 NULL 205} 206Done 207