1--TEST--
2Test key() function : usage variations
3--FILE--
4<?php
5/* Prototype  : mixed key(array $array_arg)
6 * Description: Return the key of the element currently pointed to by the internal array pointer
7 * Source code: ext/standard/array.c
8 */
9
10/*
11 * Pass arrays where keys are different data types as $array_arg to key() to test behaviour
12 */
13
14echo "*** Testing key() : 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// unexpected values 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
95// loop through each element of $inputs to check the behavior of key()
96$iterator = 1;
97foreach($inputs as $key => $input) {
98  echo "\n-- Iteration $iterator : $key data --\n";
99  while (key($input) !== NULL) {
100  	var_dump(key($input));
101  	next($input);
102  }
103  $iterator++;
104};
105?>
106===DONE===
107--EXPECT--
108*** Testing key() : usage variations ***
109
110-- Iteration 1 : int data --
111int(0)
112int(1)
113int(12345)
114int(-2345)
115
116-- Iteration 2 : float data --
117int(10)
118int(-10)
119int(0)
120
121-- Iteration 3 : extreme floats data --
122int(12345678)
123int(0)
124
125-- Iteration 4 : null uppercase data --
126string(0) ""
127
128-- Iteration 5 : null lowercase data --
129string(0) ""
130
131-- Iteration 6 : bool lowercase data --
132int(1)
133int(0)
134
135-- Iteration 7 : bool uppercase data --
136int(1)
137int(0)
138
139-- Iteration 8 : empty double quotes data --
140string(0) ""
141
142-- Iteration 9 : empty single quotes data --
143string(0) ""
144
145-- Iteration 10 : string data --
146string(7) "stringd"
147string(7) "strings"
148string(11) "hello world"
149
150-- Iteration 11 : undefined data --
151string(0) ""
152
153-- Iteration 12 : unset data --
154string(0) ""
155===DONE===
156