1--TEST-- 2Test array_combine() function : usage variations - different arrays(Bug#43424) 3--FILE-- 4<?php 5/* Prototype : array array_combine(array $keys, array $values) 6 * Description: Creates an array by using the elements of the first parameter as keys 7 * and the elements of the second as the corresponding values 8 * Source code: ext/standard/array.c 9*/ 10 11/* 12* Passing different types of arrays to both $keys and $values arguments and testing whether 13* array_combine() behaves in an expected way with the arguments passed to the function 14*/ 15 16echo "*** Testing array_combine() : Passing different types of arrays to both \$keys and \$values argument ***\n"; 17/* Different heredoc strings passed as argument to arrays */ 18// heredoc with blank line 19$blank_line = <<<EOT 20 21 22EOT; 23 24// heredoc with multiline string 25$multiline_string = <<<EOT 26hello world 27The quick brown fox jumped over; 28the lazy dog 29This is a double quoted string 30EOT; 31 32// heredoc with diferent whitespaces 33$diff_whitespaces = <<<EOT 34hello\r world\t 351111\t\t != 2222\v\v 36heredoc\ndouble quoted string. with\vdifferent\fwhite\vspaces 37EOT; 38 39// heredoc with quoted strings and numeric values 40$numeric_string = <<<EOT 4111 < 12. 123 >22 42'single quoted string' 43"double quoted string" 442222 != 1111.\t 0000 = 0000\n 45EOT; 46 47// arrays passed to $keys argument 48$arrays = array ( 49/*1*/ array(1, 2), // with default keys and numeric values 50 array(1.1, 2.2), // with default keys & float values 51 array(false,true), // with default keys and boolean values 52 array(), // empty array 53/*5*/ array(NULL), // with NULL 54 array("a\v\f","aaaa\r","b","b\tbbb","c","\[\]\!\@\#\$\%\^\&\*\(\)\{\}"), // with double quoted strings 55 array('a\v\f','aaaa\r','b','b\tbbb','c','\[\]\!\@\#\$\%\^\&\*\(\)\{\}'), // with single quoted strings 56 array("h1" => $blank_line, "h2" => $multiline_string, "h3" => $diff_whitespaces, $numeric_string), // with heredocs 57 58 // associative arrays 59/*9*/ array(1 => "one", 2 => "two", 3 => "three"), // explicit numeric keys, string values 60 array("one" => 1, "two" => 2, "three" => 3 ), // string keys & numeric values 61 array( 1 => 10, 2 => 20, 4 => 40, 3 => 30), // explicit numeric keys and numeric values 62 array( "one" => "ten", "two" => "twenty", "three" => "thirty"), // string key/value 63 array("one" => 1, 2 => "two", 4 => "four"), //mixed 64 65 // associative array, containing null/empty/boolean values as key/value 66/*14*/ array(NULL => "NULL", null => "null", "NULL" => NULL, "null" => null), 67 array(true => "true", false => "false", "false" => false, "true" => true), 68 array("" => "emptyd", '' => 'emptys', "emptyd" => "", 'emptys' => ''), 69 array(1 => '', 2 => "", 3 => NULL, 4 => null, 5 => false, 6 => true), 70 array('' => 1, "" => 2, NULL => 3, null => 4, false => 5, true => 6), 71 72 // array with repetative keys 73/*19*/ array("One" => 1, "two" => 2, "One" => 10, "two" => 20, "three" => 3) 74); 75 76// loop through each sub-array within $arrays to check the behavior of array_combine() 77// same arrays are passed to both $keys and $values 78$iterator = 1; 79foreach($arrays as $array) { 80 echo "-- Iteration $iterator --\n"; 81 var_dump( array_combine($array, $array) ); 82 $iterator++; 83} 84 85echo "Done"; 86?> 87--EXPECTF-- 88*** Testing array_combine() : Passing different types of arrays to both $keys and $values argument *** 89-- Iteration 1 -- 90array(2) { 91 [1]=> 92 int(1) 93 [2]=> 94 int(2) 95} 96-- Iteration 2 -- 97array(2) { 98 ["1.1"]=> 99 float(1.1) 100 ["2.2"]=> 101 float(2.2) 102} 103-- Iteration 3 -- 104array(2) { 105 [""]=> 106 bool(false) 107 [1]=> 108 bool(true) 109} 110-- Iteration 4 -- 111 112Warning: array_combine(): Both parameters should have at least 1 element in %s on line %d 113bool(false) 114-- Iteration 5 -- 115array(1) { 116 [""]=> 117 NULL 118} 119-- Iteration 6 -- 120array(6) { 121 ["a"]=> 122 string(3) "a" 123 ["aaaa 123"]=> 124 string(5) "aaaa 124" 125 ["b"]=> 126 string(1) "b" 127 ["b bbb"]=> 128 string(5) "b bbb" 129 ["c"]=> 130 string(1) "c" 131 ["\[\]\!\@\#$\%\^\&\*\(\)\{\}"]=> 132 string(27) "\[\]\!\@\#$\%\^\&\*\(\)\{\}" 133} 134-- Iteration 7 -- 135array(6) { 136 ["a\v\f"]=> 137 string(5) "a\v\f" 138 ["aaaa\r"]=> 139 string(6) "aaaa\r" 140 ["b"]=> 141 string(1) "b" 142 ["b\tbbb"]=> 143 string(6) "b\tbbb" 144 ["c"]=> 145 string(1) "c" 146 ["\[\]\!\@\#\$\%\^\&\*\(\)\{\}"]=> 147 string(28) "\[\]\!\@\#\$\%\^\&\*\(\)\{\}" 148} 149-- Iteration 8 -- 150array(4) { 151 [" 152"]=> 153 string(1) " 154" 155 ["hello world 156The quick brown fox jumped over; 157the lazy dog 158This is a double quoted string"]=> 159 string(88) "hello world 160The quick brown fox jumped over; 161the lazy dog 162This is a double quoted string" 163 ["hello 163 world 1641111 != 2222 165heredoc 166double quoted string. withdifferentwhitespaces"]=> 167 string(88) "hello 167 world 1681111 != 2222 169heredoc 170double quoted string. withdifferentwhitespaces" 171 ["11 < 12. 123 >22 172'single quoted string' 173"double quoted string" 1742222 != 1111. 0000 = 0000 175"]=> 176 string(90) "11 < 12. 123 >22 177'single quoted string' 178"double quoted string" 1792222 != 1111. 0000 = 0000 180" 181} 182-- Iteration 9 -- 183array(3) { 184 ["one"]=> 185 string(3) "one" 186 ["two"]=> 187 string(3) "two" 188 ["three"]=> 189 string(5) "three" 190} 191-- Iteration 10 -- 192array(3) { 193 [1]=> 194 int(1) 195 [2]=> 196 int(2) 197 [3]=> 198 int(3) 199} 200-- Iteration 11 -- 201array(4) { 202 [10]=> 203 int(10) 204 [20]=> 205 int(20) 206 [40]=> 207 int(40) 208 [30]=> 209 int(30) 210} 211-- Iteration 12 -- 212array(3) { 213 ["ten"]=> 214 string(3) "ten" 215 ["twenty"]=> 216 string(6) "twenty" 217 ["thirty"]=> 218 string(6) "thirty" 219} 220-- Iteration 13 -- 221array(3) { 222 [1]=> 223 int(1) 224 ["two"]=> 225 string(3) "two" 226 ["four"]=> 227 string(4) "four" 228} 229-- Iteration 14 -- 230array(2) { 231 ["null"]=> 232 string(4) "null" 233 [""]=> 234 NULL 235} 236-- Iteration 15 -- 237array(4) { 238 ["true"]=> 239 string(4) "true" 240 ["false"]=> 241 string(5) "false" 242 [""]=> 243 bool(false) 244 [1]=> 245 bool(true) 246} 247-- Iteration 16 -- 248array(2) { 249 ["emptys"]=> 250 string(6) "emptys" 251 [""]=> 252 string(0) "" 253} 254-- Iteration 17 -- 255array(2) { 256 [""]=> 257 bool(false) 258 [1]=> 259 bool(true) 260} 261-- Iteration 18 -- 262array(3) { 263 [4]=> 264 int(4) 265 [5]=> 266 int(5) 267 [6]=> 268 int(6) 269} 270-- Iteration 19 -- 271array(3) { 272 [10]=> 273 int(10) 274 [20]=> 275 int(20) 276 [3]=> 277 int(3) 278} 279Done 280