1--TEST--
2Test usort() function : usage variations - diff. array values
3--FILE--
4<?php
5/* Prototype  : bool usort(array $array_arg, string $cmp_function)
6 * Description: Sort an array by values using a user-defined comparison function
7 * Source code: ext/standard/array.c
8 */
9
10/*
11 * Pass an array with different data types as keys to usort() to test how it is re-ordered
12 */
13
14echo "*** Testing usort() : usage variation ***\n";
15
16function cmp_function($value1, $value2)
17{
18  if($value1 == $value2) {
19    return 0;
20  }
21  else if($value1 > $value2) {
22    return -1;
23  }
24  else {
25    return 1;
26  }
27}
28
29// different heredoc strings
30
31// single line heredoc string
32$simple_heredoc = <<<EOT2
33simple
34EOT2;
35
36// multiline heredoc string
37$multiline_heredoc = <<<EOT3
38multiline heredoc with 123
39and speci@! ch@r..\ncheck\talso
40EOT3;
41
42$array_arg = array(
43  // numeric keys
44  -2 => 9,
45  8.9 => 8,
46  012 => 7,
47  0x34 => 6,
48
49  // string keys
50  'key' => 5,  //single quoted key
51  "two" => 4,  //double quoted key
52  " " => 0,  // space as key
53
54  // bool keys
55  TRUE => 100,
56  FALSE => 25,
57
58  // null keys
59  NULL => 35,
60
61  // binary key
62  "a".chr(0)."b" => 45,
63  b"binary" => 30,
64
65  //heredoc keys
66  $simple_heredoc => 75,
67  $multiline_heredoc => 200,
68
69  // default key
70  1,
71);
72
73var_dump( usort($array_arg, 'cmp_function') );
74echo "\n-- Sorted array after usort() function call --\n";
75var_dump($array_arg);
76?>
77===DONE===
78--EXPECTF--
79*** Testing usort() : usage variation ***
80bool(true)
81
82-- Sorted array after usort() function call --
83array(15) {
84  [0]=>
85  int(200)
86  [1]=>
87  int(100)
88  [2]=>
89  int(75)
90  [3]=>
91  int(45)
92  [4]=>
93  int(35)
94  [5]=>
95  int(30)
96  [6]=>
97  int(25)
98  [7]=>
99  int(9)
100  [8]=>
101  int(8)
102  [9]=>
103  int(7)
104  [10]=>
105  int(6)
106  [11]=>
107  int(5)
108  [12]=>
109  int(4)
110  [13]=>
111  int(1)
112  [14]=>
113  int(0)
114}
115===DONE===
116