summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-04-16 09:56:08 +0200
committerNikita Popov <nikic@php.net>2016-04-16 09:59:01 +0200
commitd8590940a19cdf5039c9ee52c901b2e4a9f9d769 (patch)
tree45f4e82626b3c54c47558b1aa93e1505cd80b462 /ext/standard
parent28801bf249f113b6a25e43688fabcebb67a22df5 (diff)
downloadphp-git-d8590940a19cdf5039c9ee52c901b2e4a9f9d769.tar.gz
Use symtable lookup for arrays in array_column
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/array.c2
-rw-r--r--ext/standard/tests/array/array_column_numeric_string_key.phpt23
2 files changed, 24 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 61723e584f..34dac68d1f 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -3534,7 +3534,7 @@ static inline zval *array_column_fetch_prop(zval *data, zval *name, zval *rv)
}
} else if (Z_TYPE_P(data) == IS_ARRAY) {
if (Z_TYPE_P(name) == IS_STRING) {
- prop = zend_hash_find(Z_ARRVAL_P(data), Z_STR_P(name));
+ prop = zend_symtable_find(Z_ARRVAL_P(data), Z_STR_P(name));
} else if (Z_TYPE_P(name) == IS_LONG) {
prop = zend_hash_index_find(Z_ARRVAL_P(data), Z_LVAL_P(name));
}
diff --git a/ext/standard/tests/array/array_column_numeric_string_key.phpt b/ext/standard/tests/array/array_column_numeric_string_key.phpt
new file mode 100644
index 0000000000..aed3c35ea2
--- /dev/null
+++ b/ext/standard/tests/array/array_column_numeric_string_key.phpt
@@ -0,0 +1,23 @@
+--TEST--
+array_column() treats numeric string keys as usual
+--FILE--
+<?php
+
+$array = [[42 => 'a'], [42 => 'b']];
+var_dump(array_column($array, 42));
+var_dump(array_column($array, "42"));
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(1) "a"
+ [1]=>
+ string(1) "b"
+}
+array(2) {
+ [0]=>
+ string(1) "a"
+ [1]=>
+ string(1) "b"
+}