com php-src: Fix handling of double keys in array_column: ext/standard/array.c ext/standard/tests/array/array_co lumn_basic.phpt
ext/standard/tests/array/array_column _error.phpt
| From: | Sara Golemon | Date: | Mon, 22 Apr 2013 05:35:04 +0000 |
| Subject: | com php-src: Fix handling of double keys in array_column: ext/standard/array.c ext/standard/tests/array/array_co lumn_basic.phpt ext/standard/tests/array/array_column _error.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-71975@lists.php.net to get a copy of this message | ||
Commit: 7b34324f846505a0af6bed83556b840b50a1ef30
Author: Sara Golemon <pollita@php.net> Sun, 21 Apr 2013 22:21:40 -0700
Parents: b119836765a72700a07b004b95c92beffa3daf95
Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=7b34324f846505a0af6bed83556b840b50a1ef30
Log:
Fix handling of double keys in array_column
Also fix resource test to not localize __FILE__ to cwd.
Changed paths:
M ext/standard/array.c
M ext/standard/tests/array/array_column_basic.phpt
M ext/standard/tests/array/array_column_error.phpt
Diff:
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 9a64cf4..425d53e 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2547,6 +2547,9 @@ PHP_FUNCTION(array_column)
case IS_LONG:
column_idx = Z_LVAL_PP(zcolumn);
break;
+ case IS_DOUBLE:
+ column_idx = (long)Z_DVAL_PP(zcolumn);
+ break;
case IS_STRING:
column = Z_STRVAL_PP(zcolumn);
column_len = Z_STRLEN_PP(zcolumn);
@@ -2569,6 +2572,9 @@ PHP_FUNCTION(array_column)
case IS_LONG:
key_idx = Z_LVAL_PP(zkey);
break;
+ case IS_DOUBLE:
+ key_idx = (long)Z_DVAL_PP(zkey);
+ break;
case IS_STRING:
key = Z_STRVAL_PP(zkey);
key_len = Z_STRLEN_PP(zkey);
diff --git a/ext/standard/tests/array/array_column_basic.phpt
b/ext/standard/tests/array/array_column_basic.phpt
index 70ce213..8c49910 100644
--- a/ext/standard/tests/array/array_column_basic.phpt
+++ b/ext/standard/tests/array/array_column_basic.phpt
@@ -42,8 +42,7 @@ echo "-- last_name column from recordset, keyed by value from first_name
column
var_dump(array_column($records, 'last_name', 'first_name'));
echo "\n*** Testing multiple data types ***\n";
-$file = basename(__FILE__);
-$fh = fopen($file, 'r', true);
+$fh = fopen(__FILE__, 'r', true);
$values = array(
array(
'id' => 1,
@@ -89,11 +88,13 @@ $numericCols = array(
);
var_dump(array_column($numericCols, 1));
var_dump(array_column($numericCols, 1, 0));
+var_dump(array_column($numericCols, 1, 0.123));
echo "\n*** Testing failure to find specified column ***\n";
var_dump(array_column($numericCols, 2));
var_dump(array_column($numericCols, 'foo'));
var_dump(array_column($numericCols, 0, 'foo'));
+var_dump(array_column($numericCols, 3.14));
echo "\n*** Testing single dimensional array ***\n";
$singleDimension = array('foo', 'bar', 'baz');
@@ -230,6 +231,14 @@ array(3) {
["ccc"]=>
string(3) "333"
}
+array(3) {
+ ["aaa"]=>
+ string(3) "111"
+ ["bbb"]=>
+ string(3) "222"
+ ["ccc"]=>
+ string(3) "333"
+}
*** Testing failure to find specified column ***
array(0) {
@@ -244,6 +253,8 @@ array(3) {
[2]=>
string(3) "ccc"
}
+array(0) {
+}
*** Testing single dimensional array ***
array(0) {
diff --git a/ext/standard/tests/array/array_column_error.phpt
b/ext/standard/tests/array/array_column_error.phpt
index 1aec1ac..bdcbec0 100644
--- a/ext/standard/tests/array/array_column_error.phpt
+++ b/ext/standard/tests/array/array_column_error.phpt
@@ -26,18 +26,12 @@ var_dump(array_column(1, 'foo'));
echo "\n-- Testing array_column() column key parameter should be a string or an integer
(testing bool) --\n";
var_dump(array_column(array(), true));
-echo "\n-- Testing array_column() column key parameter should be a string or integer (testing
float) --\n";
-var_dump(array_column(array(), 2.3));
-
echo "\n-- Testing array_column() column key parameter should be a string or integer (testing
array) --\n";
var_dump(array_column(array(), array()));
echo "\n-- Testing array_column() index key parameter should be a string or an integer
(testing bool) --\n";
var_dump(array_column(array(), 'foo', true));
-echo "\n-- Testing array_column() index key parameter should be a string or integer (testing
float) --\n";
-var_dump(array_column(array(), 'foo', 2.3));
-
echo "\n-- Testing array_column() index key parameter should be a string or integer (testing
array) --\n";
var_dump(array_column(array(), 'foo', array()));
@@ -71,11 +65,6 @@ NULL
Warning: array_column(): The column key should be either a string or an integer in %s on line %d
bool(false)
--- Testing array_column() column key parameter should be a string or integer (testing float) --
-
-Warning: array_column(): The column key should be either a string or an integer in %s on line %d
-bool(false)
-
-- Testing array_column() column key parameter should be a string or integer (testing array) --
Warning: array_column(): The column key should be either a string or an integer in %s on line %d
@@ -86,11 +75,6 @@ bool(false)
Warning: array_column(): The index key should be either a string or an integer in %s on line %d
bool(false)
--- Testing array_column() index key parameter should be a string or integer (testing float) --
-
-Warning: array_column(): The index key should be either a string or an integer in %s on line %d
-bool(false)
-
-- Testing array_column() index key parameter should be a string or integer (testing array) --
Warning: array_column(): The index key should be either a string or an integer in %s on line %d