mirror of
https://github.com/php/php-src.git
synced 2026-03-27 09:42:22 +01:00
PHP requires integer typehints to be written "int" and does not allow "integer" as an alias. This changes type error messages to match the actual type name and avoids confusing messages like "must be of the type integer, integer given".
540 lines
9.5 KiB
PHP
540 lines
9.5 KiB
PHP
--TEST--
|
|
Test key(), current(), next() & reset() functions
|
|
--FILE--
|
|
<?php
|
|
/* Prototype & Usage:
|
|
mixed key ( array &$array ) -> returns the index element of the current array position
|
|
mixed current ( array &$array ) -> returns the current element in the array
|
|
mixed next ( array &$array ) -> similar to current() but advances the internal pointer to next element
|
|
mixed reset ( array &$array ) -> Reset the internal pointer to first element
|
|
*/
|
|
|
|
$basic_arrays = array (
|
|
array(0), // array with element as 0
|
|
array(1), // array with single element
|
|
array(1,2, 3, -1, -2, -3), // array of integers
|
|
array(1.1, 2.2, 3.3, -1.1, -2.2, -3.3), // array of floats
|
|
array('a', 'b', 'c', "ab", "ac", "ad"), // string array
|
|
array("a" => "apple", "b" => "book", "c" => "cook"), // associative array
|
|
array('d' => 'drink', 'p' => 'port', 's' => 'set'), // another associative array
|
|
array(1 => 'One', 2 => 'two', 3 => "three") // associative array with key as integers
|
|
);
|
|
|
|
$varient_arrays = array (
|
|
array(), // empty array
|
|
array(""), // array with null string
|
|
array(NULL),// array with NULL
|
|
array(null),// array with null
|
|
array(NULL, true, null, "", 1), // mixed array
|
|
array(-1.5 => "test", -2 => "rest", 2.5 => "two",
|
|
"" => "string", 0 => "zero", "" => "" ) // mixed array
|
|
);
|
|
|
|
echo "*** Testing basic operations ***\n";
|
|
$loop_count = 1;
|
|
foreach ($basic_arrays as $sub_array ) {
|
|
echo "-- Iteration $loop_count --\n";
|
|
$loop_count++;
|
|
$c = count ($sub_array);
|
|
$c++; // increment by one to create the situation of accessing beyond array size
|
|
while ( $c ) {
|
|
var_dump( current($sub_array)); // current element
|
|
var_dump( key($sub_array) ); // key of the current element
|
|
var_dump( next($sub_array) ); // move to next element
|
|
$c --;
|
|
}
|
|
var_dump( reset($sub_array) ); // reset the internal pointer to first element
|
|
var_dump( key($sub_array) ); // access the array after reset
|
|
var_dump( $sub_array ); // dump the array to see that its intact
|
|
|
|
echo "\n";
|
|
}
|
|
|
|
echo "\n*** Testing possible variations ***\n";
|
|
$loop_count = 1;
|
|
foreach ($varient_arrays as $sub_array ) {
|
|
echo "-- Iteration $loop_count --\n";
|
|
$loop_count++;
|
|
$c = count ($sub_array);
|
|
$c++; // increment by one to create the situation of accessing beyond array size
|
|
while ( $c ) {
|
|
var_dump( current($sub_array)); // current element
|
|
var_dump( key($sub_array) ); // key of the current element
|
|
var_dump( next($sub_array) ); // move to next element
|
|
$c --;
|
|
}
|
|
var_dump( reset($sub_array) ); // reset the internal pointer to first element
|
|
var_dump( key($sub_array) ); // access the array after reset
|
|
var_dump( $sub_array ); // dump the array to see that its intact
|
|
echo "\n";
|
|
}
|
|
|
|
/*test these functions on array which is already unset */
|
|
echo "\n-- Testing variation: when array is unset --\n";
|
|
$unset_array = array (1);
|
|
unset($unset_array);
|
|
|
|
var_dump( current($unset_array) );
|
|
var_dump( key($unset_array) );
|
|
var_dump( next($unset_array) );
|
|
var_dump( reset($unset_array) );
|
|
|
|
|
|
echo "\n*** Testing error conditions ***\n";
|
|
//Zero argument, expected 1 argument
|
|
var_dump( key() );
|
|
var_dump( current() );
|
|
var_dump( reset() );
|
|
var_dump( next() );
|
|
|
|
// args more than expected, expected 1 argument
|
|
$temp_array = array(1);
|
|
var_dump( key($temp_array, $temp_array) );
|
|
var_dump( current($temp_array, $temp_array) );
|
|
var_dump( reset($temp_array, $temp_array) );
|
|
var_dump( next($temp_array, $temp_array) );
|
|
|
|
// invalid args type, valid argument: array
|
|
$int_var = 1;
|
|
$float_var = 1.5;
|
|
$string = "string";
|
|
var_dump( key($int_var) );
|
|
var_dump( key($float_var) );
|
|
var_dump( key($string) );
|
|
|
|
var_dump( current($int_var) );
|
|
var_dump( current($float_var) );
|
|
var_dump( current($string) );
|
|
|
|
var_dump( next($int_var) );
|
|
var_dump( next($float_var) );
|
|
var_dump( next($string) );
|
|
|
|
var_dump( reset($int_var) );
|
|
var_dump( reset($float_var) );
|
|
var_dump( reset($string) );
|
|
|
|
echo "Done\n";
|
|
?>
|
|
--EXPECTF--
|
|
*** Testing basic operations ***
|
|
-- Iteration 1 --
|
|
int(0)
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
int(0)
|
|
int(0)
|
|
array(1) {
|
|
[0]=>
|
|
int(0)
|
|
}
|
|
|
|
-- Iteration 2 --
|
|
int(1)
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
int(1)
|
|
int(0)
|
|
array(1) {
|
|
[0]=>
|
|
int(1)
|
|
}
|
|
|
|
-- Iteration 3 --
|
|
int(1)
|
|
int(0)
|
|
int(2)
|
|
int(2)
|
|
int(1)
|
|
int(3)
|
|
int(3)
|
|
int(2)
|
|
int(-1)
|
|
int(-1)
|
|
int(3)
|
|
int(-2)
|
|
int(-2)
|
|
int(4)
|
|
int(-3)
|
|
int(-3)
|
|
int(5)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
int(1)
|
|
int(0)
|
|
array(6) {
|
|
[0]=>
|
|
int(1)
|
|
[1]=>
|
|
int(2)
|
|
[2]=>
|
|
int(3)
|
|
[3]=>
|
|
int(-1)
|
|
[4]=>
|
|
int(-2)
|
|
[5]=>
|
|
int(-3)
|
|
}
|
|
|
|
-- Iteration 4 --
|
|
float(1.1)
|
|
int(0)
|
|
float(2.2)
|
|
float(2.2)
|
|
int(1)
|
|
float(3.3)
|
|
float(3.3)
|
|
int(2)
|
|
float(-1.1)
|
|
float(-1.1)
|
|
int(3)
|
|
float(-2.2)
|
|
float(-2.2)
|
|
int(4)
|
|
float(-3.3)
|
|
float(-3.3)
|
|
int(5)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
float(1.1)
|
|
int(0)
|
|
array(6) {
|
|
[0]=>
|
|
float(1.1)
|
|
[1]=>
|
|
float(2.2)
|
|
[2]=>
|
|
float(3.3)
|
|
[3]=>
|
|
float(-1.1)
|
|
[4]=>
|
|
float(-2.2)
|
|
[5]=>
|
|
float(-3.3)
|
|
}
|
|
|
|
-- Iteration 5 --
|
|
string(1) "a"
|
|
int(0)
|
|
string(1) "b"
|
|
string(1) "b"
|
|
int(1)
|
|
string(1) "c"
|
|
string(1) "c"
|
|
int(2)
|
|
string(2) "ab"
|
|
string(2) "ab"
|
|
int(3)
|
|
string(2) "ac"
|
|
string(2) "ac"
|
|
int(4)
|
|
string(2) "ad"
|
|
string(2) "ad"
|
|
int(5)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(1) "a"
|
|
int(0)
|
|
array(6) {
|
|
[0]=>
|
|
string(1) "a"
|
|
[1]=>
|
|
string(1) "b"
|
|
[2]=>
|
|
string(1) "c"
|
|
[3]=>
|
|
string(2) "ab"
|
|
[4]=>
|
|
string(2) "ac"
|
|
[5]=>
|
|
string(2) "ad"
|
|
}
|
|
|
|
-- Iteration 6 --
|
|
string(5) "apple"
|
|
string(1) "a"
|
|
string(4) "book"
|
|
string(4) "book"
|
|
string(1) "b"
|
|
string(4) "cook"
|
|
string(4) "cook"
|
|
string(1) "c"
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(5) "apple"
|
|
string(1) "a"
|
|
array(3) {
|
|
["a"]=>
|
|
string(5) "apple"
|
|
["b"]=>
|
|
string(4) "book"
|
|
["c"]=>
|
|
string(4) "cook"
|
|
}
|
|
|
|
-- Iteration 7 --
|
|
string(5) "drink"
|
|
string(1) "d"
|
|
string(4) "port"
|
|
string(4) "port"
|
|
string(1) "p"
|
|
string(3) "set"
|
|
string(3) "set"
|
|
string(1) "s"
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(5) "drink"
|
|
string(1) "d"
|
|
array(3) {
|
|
["d"]=>
|
|
string(5) "drink"
|
|
["p"]=>
|
|
string(4) "port"
|
|
["s"]=>
|
|
string(3) "set"
|
|
}
|
|
|
|
-- Iteration 8 --
|
|
string(3) "One"
|
|
int(1)
|
|
string(3) "two"
|
|
string(3) "two"
|
|
int(2)
|
|
string(5) "three"
|
|
string(5) "three"
|
|
int(3)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(3) "One"
|
|
int(1)
|
|
array(3) {
|
|
[1]=>
|
|
string(3) "One"
|
|
[2]=>
|
|
string(3) "two"
|
|
[3]=>
|
|
string(5) "three"
|
|
}
|
|
|
|
|
|
*** Testing possible variations ***
|
|
-- Iteration 1 --
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
array(0) {
|
|
}
|
|
|
|
-- Iteration 2 --
|
|
string(0) ""
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(0) ""
|
|
int(0)
|
|
array(1) {
|
|
[0]=>
|
|
string(0) ""
|
|
}
|
|
|
|
-- Iteration 3 --
|
|
NULL
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
NULL
|
|
int(0)
|
|
array(1) {
|
|
[0]=>
|
|
NULL
|
|
}
|
|
|
|
-- Iteration 4 --
|
|
NULL
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
NULL
|
|
int(0)
|
|
array(1) {
|
|
[0]=>
|
|
NULL
|
|
}
|
|
|
|
-- Iteration 5 --
|
|
NULL
|
|
int(0)
|
|
bool(true)
|
|
bool(true)
|
|
int(1)
|
|
NULL
|
|
NULL
|
|
int(2)
|
|
string(0) ""
|
|
string(0) ""
|
|
int(3)
|
|
int(1)
|
|
int(1)
|
|
int(4)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
NULL
|
|
int(0)
|
|
array(5) {
|
|
[0]=>
|
|
NULL
|
|
[1]=>
|
|
bool(true)
|
|
[2]=>
|
|
NULL
|
|
[3]=>
|
|
string(0) ""
|
|
[4]=>
|
|
int(1)
|
|
}
|
|
|
|
-- Iteration 6 --
|
|
string(4) "test"
|
|
int(-1)
|
|
string(4) "rest"
|
|
string(4) "rest"
|
|
int(-2)
|
|
string(3) "two"
|
|
string(3) "two"
|
|
int(2)
|
|
string(0) ""
|
|
string(0) ""
|
|
string(0) ""
|
|
string(4) "zero"
|
|
string(4) "zero"
|
|
int(0)
|
|
bool(false)
|
|
bool(false)
|
|
NULL
|
|
bool(false)
|
|
string(4) "test"
|
|
int(-1)
|
|
array(5) {
|
|
[-1]=>
|
|
string(4) "test"
|
|
[-2]=>
|
|
string(4) "rest"
|
|
[2]=>
|
|
string(3) "two"
|
|
[""]=>
|
|
string(0) ""
|
|
[0]=>
|
|
string(4) "zero"
|
|
}
|
|
|
|
|
|
-- Testing variation: when array is unset --
|
|
|
|
Notice: Undefined variable: unset_array in %s on line %d
|
|
|
|
Warning: current() expects parameter 1 to be array, null given in %s on line %d
|
|
NULL
|
|
|
|
Notice: Undefined variable: unset_array in %s on line %d
|
|
|
|
Warning: key() expects parameter 1 to be array, null given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects parameter 1 to be array, null given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects parameter 1 to be array, null given in %s on line %d
|
|
NULL
|
|
|
|
*** Testing error conditions ***
|
|
|
|
Warning: key() expects exactly 1 parameter, 0 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: current() expects exactly 1 parameter, 0 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects exactly 1 parameter, 0 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects exactly 1 parameter, 0 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: key() expects exactly 1 parameter, 2 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: current() expects exactly 1 parameter, 2 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects exactly 1 parameter, 2 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects exactly 1 parameter, 2 given in %s on line %d
|
|
NULL
|
|
|
|
Warning: key() expects parameter 1 to be array, int given in %s on line %d
|
|
NULL
|
|
|
|
Warning: key() expects parameter 1 to be array, float given in %s on line %d
|
|
NULL
|
|
|
|
Warning: key() expects parameter 1 to be array, string given in %s on line %d
|
|
NULL
|
|
|
|
Warning: current() expects parameter 1 to be array, int given in %s on line %d
|
|
NULL
|
|
|
|
Warning: current() expects parameter 1 to be array, float given in %s on line %d
|
|
NULL
|
|
|
|
Warning: current() expects parameter 1 to be array, string given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects parameter 1 to be array, int given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects parameter 1 to be array, float given in %s on line %d
|
|
NULL
|
|
|
|
Warning: next() expects parameter 1 to be array, string given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects parameter 1 to be array, int given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects parameter 1 to be array, float given in %s on line %d
|
|
NULL
|
|
|
|
Warning: reset() expects parameter 1 to be array, string given in %s on line %d
|
|
NULL
|
|
Done
|