zval *input, /* Input array */
**entry; /* An array entry */
long offset, /* Offset to get elements from */
- length; /* How many elements to get */
+ length = 0; /* How many elements to get */
zend_bool preserve_keys = 0; /* Whether to preserve keys while copying to the new array or not */
int num_in, /* Number of elements in the input array */
pos; /* Current position in the array */
- zval *length_param;
char *string_key;
uint string_key_len;
ulong num_key;
HashPosition hpos;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|zb", &input, &offset, &length_param, &preserve_keys) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|lb", &input, &offset, &length, &preserve_keys) == FAILURE) {
return;
}
num_in = zend_hash_num_elements(Z_ARRVAL_P(input));
/* We want all entries from offset to the end if length is not passed or is null */
- if (ZEND_NUM_ARGS() >= 3 && Z_TYPE_P(length_param) != IS_NULL) {
- length = Z_LVAL_P(length_param);
- } else {
+ if (length == 0) {
length = num_in;
}
-
+
/* Initialize returned array */
array_init(return_value);
--TEST--
Testing array_slice() function
--FILE--
-
<?php
$var_array = array(
var_dump (array_slice($var_array[2], -3, -2, false) );
?>
-
--EXPECTF--
*** Output for Zero Argument ***
-Warning: array_slice() expects at least %d parameters, %d given in %s on line %d
+Warning: array_slice() expects at least 2 parameters, 0 given in %s on line %d
*** Output for Single array Argument ***
-Warning: array_slice() expects at least %d parameters, %d given in %s on line %d
+Warning: array_slice() expects at least 2 parameters, 1 given in %s on line %d
*** Output for invalid number of Arguments ***
-Warning: array_slice() expects at most %d parameters, %d given in %s on line %d
+Warning: array_slice() expects at most 4 parameters, 5 given in %s on line %d
*** Output for scalar Argument ***
-Warning: array_slice() expects parameter %d to be array, integer given in %s on line %d
+Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d
*** Output for string Argument ***
-Warning: array_slice() expects parameter %d to be array, string given in %s on line %d%d
+Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
*** Iteration 1 ***
[2]=>
int(4)
}
-array(0) {
+array(8) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ [2]=>
+ int(4)
+ [3]=>
+ int(5)
+ [4]=>
+ int(6)
+ [5]=>
+ int(7)
+ [6]=>
+ int(8)
+ [7]=>
+ int(9)
}
array(5) {
[0]=>
[2]=>
int(3)
}
-array(0) {
+array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
}
array(6) {
[0]=>
[1]=>
int(9)
}
-array(0) {
+array(2) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
}
array(0) {
}
[3]=>
int(4)
}
-array(0) {
+array(8) {
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
}
array(5) {
[1]=>
[2]=>
int(3)
}
-array(0) {
+array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
}
array(6) {
[0]=>
[8]=>
int(9)
}
-array(0) {
+array(2) {
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
}
array(0) {
}
[2]=>
string(4) "Four"
}
-array(0) {
+array(4) {
+ [0]=>
+ string(3) "Two"
+ [1]=>
+ string(5) "Three"
+ [2]=>
+ string(4) "Four"
+ [3]=>
+ string(4) "Five"
}
array(1) {
[0]=>
[2]=>
string(5) "Three"
}
-array(0) {
+array(5) {
+ [0]=>
+ string(3) "One"
+ [1]=>
+ string(3) "Two"
+ [2]=>
+ string(5) "Three"
+ [3]=>
+ string(4) "Four"
+ [4]=>
+ string(4) "Five"
}
array(2) {
[0]=>
[1]=>
string(4) "Five"
}
-array(0) {
+array(2) {
+ [0]=>
+ string(4) "Four"
+ [1]=>
+ string(4) "Five"
}
array(0) {
}
[3]=>
string(4) "Four"
}
-array(0) {
+array(4) {
+ [1]=>
+ string(3) "Two"
+ [2]=>
+ string(5) "Three"
+ [3]=>
+ string(4) "Four"
+ [4]=>
+ string(4) "Five"
}
array(1) {
[1]=>
[2]=>
string(5) "Three"
}
-array(0) {
+array(5) {
+ [0]=>
+ string(3) "One"
+ [1]=>
+ string(3) "Two"
+ [2]=>
+ string(5) "Three"
+ [3]=>
+ string(4) "Four"
+ [4]=>
+ string(4) "Five"
}
array(2) {
[0]=>
[4]=>
string(4) "Five"
}
-array(0) {
+array(2) {
+ [3]=>
+ string(4) "Four"
+ [4]=>
+ string(4) "Five"
}
array(0) {
}
[2]=>
string(5) "seven"
}
-array(0) {
+array(7) {
+ [0]=>
+ string(3) "six"
+ [1]=>
+ int(7)
+ [2]=>
+ string(5) "seven"
+ [3]=>
+ int(8)
+ [4]=>
+ string(5) "eight"
+ [5]=>
+ int(9)
+ [6]=>
+ string(4) "nine"
}
array(4) {
[0]=>
[2]=>
int(7)
}
-array(0) {
+array(8) {
+ [0]=>
+ int(6)
+ [1]=>
+ string(3) "six"
+ [2]=>
+ int(7)
+ [3]=>
+ string(5) "seven"
+ [4]=>
+ int(8)
+ [5]=>
+ string(5) "eight"
+ [6]=>
+ int(9)
+ [7]=>
+ string(4) "nine"
}
array(5) {
[0]=>
[1]=>
string(4) "nine"
}
-array(0) {
+array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ string(4) "nine"
}
array(0) {
}
[3]=>
string(5) "seven"
}
-array(0) {
+array(7) {
+ [1]=>
+ string(3) "six"
+ [2]=>
+ int(7)
+ [3]=>
+ string(5) "seven"
+ [4]=>
+ int(8)
+ [5]=>
+ string(5) "eight"
+ [6]=>
+ int(9)
+ [7]=>
+ string(4) "nine"
}
array(4) {
[1]=>
[2]=>
int(7)
}
-array(0) {
+array(8) {
+ [0]=>
+ int(6)
+ [1]=>
+ string(3) "six"
+ [2]=>
+ int(7)
+ [3]=>
+ string(5) "seven"
+ [4]=>
+ int(8)
+ [5]=>
+ string(5) "eight"
+ [6]=>
+ int(9)
+ [7]=>
+ string(4) "nine"
}
array(5) {
[0]=>
[7]=>
string(4) "nine"
}
-array(0) {
+array(2) {
+ [6]=>
+ int(9)
+ [7]=>
+ string(4) "nine"
}
array(0) {
}
["d"]=>
string(3) "ddd"
}
-array(0) {
+array(4) {
+ ["A"]=>
+ string(3) "AAA"
+ ["c"]=>
+ string(3) "ccc"
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
}
array(1) {
["A"]=>
["c"]=>
string(3) "ccc"
}
-array(0) {
+array(5) {
+ ["a"]=>
+ string(3) "aaa"
+ ["A"]=>
+ string(3) "AAA"
+ ["c"]=>
+ string(3) "ccc"
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
}
array(2) {
["a"]=>
["e"]=>
string(3) "eee"
}
-array(0) {
+array(2) {
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
}
array(0) {
}
["d"]=>
string(3) "ddd"
}
-array(0) {
-}
+array(4) {
+ ["A"]=>
+ string(3) "AAA"
+ ["c"]=>
+ string(3) "ccc"
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
+}
array(1) {
["A"]=>
string(3) "AAA"
["c"]=>
string(3) "ccc"
}
-array(0) {
+array(5) {
+ ["a"]=>
+ string(3) "aaa"
+ ["A"]=>
+ string(3) "AAA"
+ ["c"]=>
+ string(3) "ccc"
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
}
array(2) {
["a"]=>
["e"]=>
string(3) "eee"
}
-array(0) {
+array(2) {
+ ["d"]=>
+ string(3) "ddd"
+ ["e"]=>
+ string(3) "eee"
}
array(0) {
}
[2]=>
string(4) "four"
}
-array(0) {
+array(4) {
+ [0]=>
+ string(3) "two"
+ [1]=>
+ string(5) "three"
+ [2]=>
+ string(4) "four"
+ [3]=>
+ string(4) "five"
}
array(1) {
[0]=>
[2]=>
string(5) "three"
}
-array(0) {
+array(5) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ string(3) "two"
+ [2]=>
+ string(5) "three"
+ [3]=>
+ string(4) "four"
+ [4]=>
+ string(4) "five"
}
array(2) {
[0]=>
[1]=>
string(4) "five"
}
-array(0) {
+array(2) {
+ [0]=>
+ string(4) "four"
+ [1]=>
+ string(4) "five"
}
array(0) {
}
[4]=>
string(4) "four"
}
-array(0) {
+array(4) {
+ [2]=>
+ string(3) "two"
+ [3]=>
+ string(5) "three"
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(1) {
[2]=>
[3]=>
string(5) "three"
}
-array(0) {
+array(5) {
+ [1]=>
+ string(3) "one"
+ [2]=>
+ string(3) "two"
+ [3]=>
+ string(5) "three"
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(2) {
[1]=>
[5]=>
string(4) "five"
}
-array(0) {
+array(2) {
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(0) {
}
[2]=>
string(4) "four"
}
-array(0) {
+array(4) {
+ [0]=>
+ string(3) "two"
+ [1]=>
+ int(7)
+ [2]=>
+ string(4) "four"
+ [3]=>
+ string(4) "five"
}
array(1) {
[0]=>
[2]=>
int(7)
}
-array(0) {
+array(5) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ string(3) "two"
+ [2]=>
+ int(7)
+ [3]=>
+ string(4) "four"
+ [4]=>
+ string(4) "five"
}
array(2) {
[0]=>
[1]=>
string(4) "five"
}
-array(0) {
+array(2) {
+ [0]=>
+ string(4) "four"
+ [1]=>
+ string(4) "five"
}
array(0) {
}
[4]=>
string(4) "four"
}
-array(0) {
+array(4) {
+ [2]=>
+ string(3) "two"
+ [3]=>
+ int(7)
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(1) {
[2]=>
[3]=>
int(7)
}
-array(0) {
+array(5) {
+ [1]=>
+ string(3) "one"
+ [2]=>
+ string(3) "two"
+ [3]=>
+ int(7)
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(2) {
[1]=>
[5]=>
string(4) "five"
}
-array(0) {
+array(2) {
+ [4]=>
+ string(4) "four"
+ [5]=>
+ string(4) "five"
}
array(0) {
}
[""]=>
string(5) "blank"
}
-array(0) {
+array(9) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ int(6)
+ [""]=>
+ string(5) "blank"
+ [2]=>
+ string(5) "float"
+ ["F"]=>
+ string(3) "FFF"
+ ["blank"]=>
+ string(0) ""
+ [3]=>
+ float(3.7)
+ [4]=>
+ string(4) "Five"
+ [5]=>
+ float(8.6)
}
array(6) {
[0]=>
[1]=>
int(6)
}
-array(0) {
+array(10) {
+ ["f"]=>
+ string(3) "fff"
+ [0]=>
+ string(3) "one"
+ [1]=>
+ int(6)
+ [""]=>
+ string(5) "blank"
+ [2]=>
+ string(5) "float"
+ ["F"]=>
+ string(3) "FFF"
+ ["blank"]=>
+ string(0) ""
+ [3]=>
+ float(3.7)
+ [4]=>
+ string(4) "Five"
+ [5]=>
+ float(8.6)
}
array(7) {
["f"]=>
[1]=>
float(8.6)
}
-array(0) {
+array(2) {
+ [0]=>
+ string(4) "Five"
+ [1]=>
+ float(8.6)
}
array(0) {
}
[""]=>
string(5) "blank"
}
-array(0) {
+array(9) {
+ [1]=>
+ string(3) "one"
+ [4]=>
+ int(6)
+ [""]=>
+ string(5) "blank"
+ [2]=>
+ string(5) "float"
+ ["F"]=>
+ string(3) "FFF"
+ ["blank"]=>
+ string(0) ""
+ [3]=>
+ float(3.7)
+ [5]=>
+ string(4) "Five"
+ [6]=>
+ float(8.6)
}
array(6) {
[1]=>
[4]=>
int(6)
}
-array(0) {
+array(10) {
+ ["f"]=>
+ string(3) "fff"
+ [1]=>
+ string(3) "one"
+ [4]=>
+ int(6)
+ [""]=>
+ string(5) "blank"
+ [2]=>
+ string(5) "float"
+ ["F"]=>
+ string(3) "FFF"
+ ["blank"]=>
+ string(0) ""
+ [3]=>
+ float(3.7)
+ [5]=>
+ string(4) "Five"
+ [6]=>
+ float(8.6)
}
array(7) {
["f"]=>
[6]=>
float(8.6)
}
-array(0) {
+array(2) {
+ [5]=>
+ string(4) "Five"
+ [6]=>
+ float(8.6)
}
array(0) {
}
[2]=>
string(2) "45"
}
-array(0) {
+array(3) {
+ [0]=>
+ string(4) "name"
+ [1]=>
+ string(3) "age"
+ [2]=>
+ string(2) "45"
}
array(0) {
}
[2]=>
string(3) "age"
}
-array(0) {
+array(4) {
+ [0]=>
+ int(12)
+ [1]=>
+ string(4) "name"
+ [2]=>
+ string(3) "age"
+ [3]=>
+ string(2) "45"
}
array(1) {
[0]=>
[1]=>
string(2) "45"
}
-array(0) {
+array(2) {
+ [0]=>
+ string(3) "age"
+ [1]=>
+ string(2) "45"
}
array(0) {
}
[3]=>
string(2) "45"
}
-array(0) {
+array(3) {
+ [1]=>
+ string(4) "name"
+ [2]=>
+ string(3) "age"
+ [3]=>
+ string(2) "45"
}
array(0) {
}
[2]=>
string(3) "age"
}
-array(0) {
+array(4) {
+ [0]=>
+ int(12)
+ [1]=>
+ string(4) "name"
+ [2]=>
+ string(3) "age"
+ [3]=>
+ string(2) "45"
}
array(1) {
[0]=>
[3]=>
string(2) "45"
}
-array(0) {
+array(2) {
+ [2]=>
+ string(3) "age"
+ [3]=>
+ string(2) "45"
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [1]=>
+ array(0) {
+ }
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(3) {
+ [0]=>
+ array(3) {
+ [0]=>
+ string(3) "oNe"
+ [1]=>
+ string(3) "tWo"
+ [2]=>
+ int(4)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [2]=>
+ array(0) {
+ }
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [1]=>
+ array(0) {
+ }
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(2) {
+ [1]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [2]=>
+ array(0) {
+ }
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(3) {
+ [0]=>
+ array(3) {
+ [0]=>
+ string(3) "oNe"
+ [1]=>
+ string(3) "tWo"
+ [2]=>
+ int(4)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [2]=>
+ array(0) {
+ }
}
array(0) {
}
array(0) {
}
}
-array(0) {
+array(2) {
+ [1]=>
+ array(5) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(20)
+ [2]=>
+ int(30)
+ [3]=>
+ int(40)
+ [4]=>
+ int(50)
+ }
+ [2]=>
+ array(0) {
+ }
}
array(0) {
}
--- /dev/null
+--TEST--
+Bug #43541 (length parameter omitted or not does not work when casted to float)
+--FILE--
+<?php
+$arr = array(1, 2, 3, 4, 5, 6);
+
+var_dump(array_slice($arr, 0, (float)2));
+var_dump(array_slice($arr, 0, (int)2));
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}