1--TEST--
2Test ksort() function : object functionality - sort objects
3--FILE--
4<?php
5/* Prototype  : bool ksort ( array &$array [, int $sort_flags] )
6 * Description: Sort an array by key, maintaining key to data correlation.
7 * Source code: ext/standard/array.c
8*/
9/*
10 * testing ksort() by providing array ofinteger/string objects with following flag values:
11 *  1.SORT_NUMERIC - compare items numerically
12 *  2.SORT_STRING - compare items as strings
13*/
14
15echo "*** Testing ksort() : object functionality ***\n";
16
17// class declaration for integer objects
18class IntegerObject
19{
20  public $class_value;
21  // initializing object member value
22  function __construct($value){
23    $this->class_value = $value;
24  }
25
26}
27
28// class declaration for string objects
29class StringObject
30{
31  public $class_value;
32  // initializing object member value
33  function __construct($value){
34    $this->class_value = $value;
35  }
36
37  // return string value
38  function __tostring() {
39   return (string)$this->value;
40  }
41
42}
43
44// array of integer objects
45$unsorted_int_obj = array (
46  11 => new IntegerObject(11), 66 =>  new IntegerObject(66),
47  23 => new IntegerObject(23), -5 => new IntegerObject(-5),
48  1 => new IntegerObject(0.001), 0 => new IntegerObject(0)
49);
50
51// array of string objects
52$unsorted_str_obj = array (
53  "axx" => new StringObject("axx"), "t" => new StringObject("t"),
54  "w" => new StringObject("w"), "py" => new StringObject("py"),
55  "apple" => new StringObject("apple"), "Orange" => new StringObject("Orange"),
56  "Lemon" => new StringObject("Lemon"), "aPPle" => new StringObject("aPPle")
57);
58echo "\n-- Testing ksort() by supplying various object arrays, 'flag' value is defualt --\n";
59
60// testing ksort() function by supplying integer object array, flag value is defualt
61$temp_array = $unsorted_int_obj;
62var_dump(ksort($temp_array) );
63var_dump($temp_array);
64
65// testing ksort() function by supplying string object array, flag value is defualt
66$temp_array = $unsorted_str_obj;
67var_dump(ksort($temp_array) );
68var_dump($temp_array);
69
70echo "\n-- Testing ksort() by supplying various object arrays, 'flag' value is SORT_REGULAR --\n";
71// testing ksort() function by supplying integer object array, flag value = SORT_REGULAR
72$temp_array = $unsorted_int_obj;
73var_dump(ksort($temp_array, SORT_REGULAR) );
74var_dump($temp_array);
75
76// testing ksort() function by supplying string object array, flag value = SORT_REGULAR
77$temp_array = $unsorted_str_obj;
78var_dump(ksort($temp_array, SORT_REGULAR) );
79var_dump($temp_array);
80
81echo "Done\n";
82?>
83--EXPECTF--
84*** Testing ksort() : object functionality ***
85
86-- Testing ksort() by supplying various object arrays, 'flag' value is defualt --
87bool(true)
88array(6) {
89  [-5]=>
90  object(IntegerObject)#%d (1) {
91    ["class_value"]=>
92    int(-5)
93  }
94  [0]=>
95  object(IntegerObject)#%d (1) {
96    ["class_value"]=>
97    int(0)
98  }
99  [1]=>
100  object(IntegerObject)#%d (1) {
101    ["class_value"]=>
102    float(0.001)
103  }
104  [11]=>
105  object(IntegerObject)#%d (1) {
106    ["class_value"]=>
107    int(11)
108  }
109  [23]=>
110  object(IntegerObject)#%d (1) {
111    ["class_value"]=>
112    int(23)
113  }
114  [66]=>
115  object(IntegerObject)#%d (1) {
116    ["class_value"]=>
117    int(66)
118  }
119}
120bool(true)
121array(8) {
122  ["Lemon"]=>
123  object(StringObject)#%d (1) {
124    ["class_value"]=>
125    string(5) "Lemon"
126  }
127  ["Orange"]=>
128  object(StringObject)#%d (1) {
129    ["class_value"]=>
130    string(6) "Orange"
131  }
132  ["aPPle"]=>
133  object(StringObject)#%d (1) {
134    ["class_value"]=>
135    string(5) "aPPle"
136  }
137  ["apple"]=>
138  object(StringObject)#%d (1) {
139    ["class_value"]=>
140    string(5) "apple"
141  }
142  ["axx"]=>
143  object(StringObject)#%d (1) {
144    ["class_value"]=>
145    string(3) "axx"
146  }
147  ["py"]=>
148  object(StringObject)#%d (1) {
149    ["class_value"]=>
150    string(2) "py"
151  }
152  ["t"]=>
153  object(StringObject)#%d (1) {
154    ["class_value"]=>
155    string(1) "t"
156  }
157  ["w"]=>
158  object(StringObject)#%d (1) {
159    ["class_value"]=>
160    string(1) "w"
161  }
162}
163
164-- Testing ksort() by supplying various object arrays, 'flag' value is SORT_REGULAR --
165bool(true)
166array(6) {
167  [-5]=>
168  object(IntegerObject)#%d (1) {
169    ["class_value"]=>
170    int(-5)
171  }
172  [0]=>
173  object(IntegerObject)#%d (1) {
174    ["class_value"]=>
175    int(0)
176  }
177  [1]=>
178  object(IntegerObject)#%d (1) {
179    ["class_value"]=>
180    float(0.001)
181  }
182  [11]=>
183  object(IntegerObject)#%d (1) {
184    ["class_value"]=>
185    int(11)
186  }
187  [23]=>
188  object(IntegerObject)#%d (1) {
189    ["class_value"]=>
190    int(23)
191  }
192  [66]=>
193  object(IntegerObject)#%d (1) {
194    ["class_value"]=>
195    int(66)
196  }
197}
198bool(true)
199array(8) {
200  ["Lemon"]=>
201  object(StringObject)#%d (1) {
202    ["class_value"]=>
203    string(5) "Lemon"
204  }
205  ["Orange"]=>
206  object(StringObject)#%d (1) {
207    ["class_value"]=>
208    string(6) "Orange"
209  }
210  ["aPPle"]=>
211  object(StringObject)#%d (1) {
212    ["class_value"]=>
213    string(5) "aPPle"
214  }
215  ["apple"]=>
216  object(StringObject)#%d (1) {
217    ["class_value"]=>
218    string(5) "apple"
219  }
220  ["axx"]=>
221  object(StringObject)#%d (1) {
222    ["class_value"]=>
223    string(3) "axx"
224  }
225  ["py"]=>
226  object(StringObject)#%d (1) {
227    ["class_value"]=>
228    string(2) "py"
229  }
230  ["t"]=>
231  object(StringObject)#%d (1) {
232    ["class_value"]=>
233    string(1) "t"
234  }
235  ["w"]=>
236  object(StringObject)#%d (1) {
237    ["class_value"]=>
238    string(1) "w"
239  }
240}
241Done
242