1--TEST--
2Test array_rand() function : usage variation - with associative arrays for 'input' parameter
3--FILE--
4<?php
5/* Prototype  : mixed array_rand(array $input [, int $num_req])
6 * Description: Return key/keys for random entry/entries in the array
7 * Source code: ext/standard/array.c
8*/
9
10/*
11* Test behaviour of array_rand() function when associative array is passed to
12* the 'input' parameter in the function call
13*/
14
15echo "*** Testing array_rand() : with associative arrays ***\n";
16
17// initialise associative arrays
18$asso_arrays = array(
19
20       // array with numeric keys
21/*1*/  array(1 => 'one', 2 => 2, 1234567890 => 'big', -1 => 'negative key',
22             2.3 => 'float key', 0 => "zero key", 0.2 => 'decimal key',
23             2e2 => 'exp key1', -2e3 => 'negative exp key'),
24
25       // array with string keys
26       array('one' => 1, "two" => 2.0, "three" => 'three',
27             '12twelve' => 12.00, "" => 'empty string', " " => "space key"),
28
29       // array with hexa values as keys
30/*3*/  array(0xabc => 2748, 0x12f => '303', 0xff => "255", -0xff => "-255"),
31
32       // array with octal values as keys
33       array(0123 => 83, 0129 => 10, 010 => "8", -0348 => "-28", 0012 => '10'),
34
35       // array with bool values as keys
36       array(TRUE => '1', true => true, TrUe => "TRUE",
37             FALSE => '0', false => false, FaLsE => "FALSE"),
38
39       // array with special chars as keys
40/*6*/  array('##' => "key1", '&$r' => 'key2', '!' => "key3", '<>' =>'key4',
41             "NULL" => 'key5', "\n" => 'newline as key',
42             "\t" => "tab as key", "'" => 'single quote as key',
43             '"' => 'double quote as key', "\0" => "null char as key")
44);
45
46/* looping to test array_rand() function with different arrays having
47 * different types of keys
48*/
49$counter = 1;
50foreach($asso_arrays as $input) {
51  echo "\n-- Iteration $counter --\n";
52
53  // with default argument
54  echo"\nWith default argument\n";
55  var_dump( array_rand($input) );
56
57  // with default and optional arguments
58  echo"\nWith num_req = 1\n";
59  var_dump( array_rand($input, 1) );  // with $num_req=1
60  echo"\nWith num_req = 2\n";
61  var_dump( array_rand($input, 2) );  // with $num_req=2
62
63  $counter++;
64}  // end of for loop
65
66
67echo "Done";
68?>
69--EXPECTREGEX--
70\*\*\* Testing array_rand\(\) : with associative arrays \*\*\*
71
72-- Iteration 1 --
73
74With default argument
75int\([012-][12.e]*[23e]*[34]*[5]*[6]*[7]*[8]*[9]*[0]*\)
76
77With num_req = 1
78int\([012-][12.e]*[23e]*[34]*[5]*[6]*[7]*[8]*[9]*[0]*\)
79
80With num_req = 2
81array\(2\) {
82  \[0\]=>
83  int\([012-][12.e]*[23e]*[34]*[5]*[6]*[7]*[8]*[9]*[0]*\)
84  \[1\]=>
85  int\([012-][12.e]*[23e]*[34]*[5]*[6]*[7]*[8]*[9]*[0]*\)
86}
87
88-- Iteration 2 --
89
90With default argument
91string\([0-9]*\) "[ot1 ]*[hnw2]*[eort]*[ew]*[e]*[l]*[v]*[e]*"
92
93With num_req = 1
94string\([0-9]*\) "[ot1 ]*[hnw2]*[eort]*[ew]*[e]*[l]*[v]*[e]*"
95
96With num_req = 2
97array\(2\) {
98  \[0\]=>
99  string\([0-9]*\) "[ot1 ]*[hnw2]*[eort]*[ew]*[e]*[l]*[v]*[e]*"
100  \[1\]=>
101  string\([0-9]*\) "[ot1 ]*[hnw2]*[eort]*[ew]*[e]*[l]*[v]*[e]*"
102}
103
104-- Iteration 3 --
105
106With default argument
107int\([23-]*[2570]*[345]*[58]*\)
108
109With num_req = 1
110int\([23-]*[2570]*[345]*[58]*\)
111
112With num_req = 2
113array\(2\) {
114  \[0\]=>
115  int\([23-]*[2570]*[345]*[58]*\)
116  \[1\]=>
117  int\([23-]*[2570]*[345]*[58]*\)
118}
119
120-- Iteration 4 --
121
122With default argument
123int\([18-]*[023]*[8]*\)
124
125With num_req = 1
126int\([18-]*[023]*[8]*\)
127
128With num_req = 2
129array\(2\) {
130  \[0\]=>
131  int\([18-]*[023]*[8]*\)
132  \[1\]=>
133  int\([18-]*[023]*[8]*\)
134}
135
136-- Iteration 5 --
137
138With default argument
139int\([01]\)
140
141With num_req = 1
142int\([01]\)
143
144With num_req = 2
145array\(2\) {
146  \[0\]=>
147  int\([01]\)
148  \[1\]=>
149  int\([01]\)
150}
151
152-- Iteration 6 --
153
154With default argument
155string\([0-9]*\) "[#&!N  <\n\t'"\0]*[U#$>]*[rL]*[L]*"
156
157With num_req = 1
158string\([0-9]*\) "[#&!N  <\n\t'"\0]*[U#$>]*[rL]*[L]*"
159
160With num_req = 2
161array\(2\) {
162  \[0\]=>
163  string\([0-9]*\) "[#&!N  <\n\t'"\0]*[U#$>]*[rL]*[L]*"
164  \[1\]=>
165  string\([0-9]*\) "[#&!N  <\n\t'"\0]*[U#$>]*[rL]*[L]*"
166}
167Done
168
169