1--TEST--
2Test natcasesort() function : usage variations - Different array keys
3--FILE--
4<?php
5/* Prototype  : bool natcasesort(array &$array_arg)
6 * Description: Sort an array using case-insensitive natural sort
7 * Source code: ext/standard/array.c
8 */
9
10/*
11 * Pass arrays where the keys are different data types to test behaviour of natcasesort()
12 */
13
14echo "*** Testing natcasesort() : usage variations ***\n";
15
16//get an unset variable
17$unset_var = 10;
18unset ($unset_var);
19
20// heredoc string
21$heredoc = <<<EOT
22hello world
23EOT;
24
25// arrays with keys as different data types to be passed as $array_arg
26$inputs = array(
27
28       // int data
29/*1*/  'int' => array(
30       0 => 'zero',
31       1 => 'one',
32       12345 => 'positive',
33       -2345 => 'negative',
34       ),
35
36       // float data
37/*2*/  'float' => array(
38       10.5 => 'positive',
39       -10.5 => 'negative',
40       .5 => 'half',
41       ),
42
43/*3*/  'extreme floats' => array(
44       12.3456789000e6 => 'large',
45       12.3456789000E-10 => 'small',
46       ),
47
48       // null data
49/*4*/  'null uppercase' => array(
50       NULL => 'null 1',
51       ),
52
53/*5*/  'null lowercase' => array(
54       null => 'null 2',
55       ),
56
57       // boolean data
58/*6*/ 'bool lowercase' => array(
59       true => 'lowert',
60       false => 'lowerf',
61       ),
62
63/*7*/  'bool uppercase' => array(
64       TRUE => 'uppert',
65       FALSE => 'upperf',
66       ),
67
68       // empty data
69/*8*/ 'empty double quotes' => array(
70       "" => 'emptyd',
71       ),
72
73/*9*/  'empty single quotes' => array(
74       '' => 'emptys',
75       ),
76
77       // string data
78/*10*/ 'string' => array(
79       "stringd" => 'stringd',
80       'strings' => 'strings',
81       $heredoc => 'stringh',
82       ),
83
84       // undefined data
85/*11*/ 'undefined' => array(
86       @$undefined_var => 'undefined',
87       ),
88
89       // unset data
90/*12*/ 'unset' => array(
91       @$unset_var => 'unset',
92       ),
93
94       // duplicate values
95/*13*/ 'duplicate' => array(
96       'foo' => 'bar',
97       'baz' => 'bar',
98       'hello' => 'world'
99       ),
100
101);
102
103// loop through each element of $inputs to check the behavior of natcasesort()
104$iterator = 1;
105foreach($inputs as $input) {
106	echo "\n-- Iteration $iterator --\n";
107	var_dump( natcasesort($input) );
108	var_dump($input);
109	$iterator++;
110};
111
112echo "Done";
113?>
114
115--EXPECTF--
116*** Testing natcasesort() : usage variations ***
117
118-- Iteration 1 --
119bool(true)
120array(4) {
121  [-2345]=>
122  string(8) "negative"
123  [1]=>
124  string(3) "one"
125  [12345]=>
126  string(8) "positive"
127  [0]=>
128  string(4) "zero"
129}
130
131-- Iteration 2 --
132bool(true)
133array(3) {
134  [0]=>
135  string(4) "half"
136  [-10]=>
137  string(8) "negative"
138  [10]=>
139  string(8) "positive"
140}
141
142-- Iteration 3 --
143bool(true)
144array(2) {
145  [12345678]=>
146  string(5) "large"
147  [0]=>
148  string(5) "small"
149}
150
151-- Iteration 4 --
152bool(true)
153array(1) {
154  [""]=>
155  string(6) "null 1"
156}
157
158-- Iteration 5 --
159bool(true)
160array(1) {
161  [""]=>
162  string(6) "null 2"
163}
164
165-- Iteration 6 --
166bool(true)
167array(2) {
168  [0]=>
169  string(6) "lowerf"
170  [1]=>
171  string(6) "lowert"
172}
173
174-- Iteration 7 --
175bool(true)
176array(2) {
177  [0]=>
178  string(6) "upperf"
179  [1]=>
180  string(6) "uppert"
181}
182
183-- Iteration 8 --
184bool(true)
185array(1) {
186  [""]=>
187  string(6) "emptyd"
188}
189
190-- Iteration 9 --
191bool(true)
192array(1) {
193  [""]=>
194  string(6) "emptys"
195}
196
197-- Iteration 10 --
198bool(true)
199array(3) {
200  ["stringd"]=>
201  string(7) "stringd"
202  ["hello world"]=>
203  string(7) "stringh"
204  ["strings"]=>
205  string(7) "strings"
206}
207
208-- Iteration 11 --
209bool(true)
210array(1) {
211  [""]=>
212  string(9) "undefined"
213}
214
215-- Iteration 12 --
216bool(true)
217array(1) {
218  [""]=>
219  string(5) "unset"
220}
221
222-- Iteration 13 --
223bool(true)
224array(3) {
225  ["foo"]=>
226  string(3) "bar"
227  ["baz"]=>
228  string(3) "bar"
229  ["hello"]=>
230  string(5) "world"
231}
232Done