array_keys($arr) and array_keys($arr, NULL) should behave differently

In Zend, the latter form only returns keys which have a NULL
(or NULL-like if $strict==false) value.  The former returns all keys.
Esse commit está contido em:
Sara Golemon
2013-03-15 10:17:40 -07:00
commit 2027ae7e7e
4 arquivos alterados com 47 adições e 1 exclusões
+1 -1
Ver Arquivo
@@ -777,7 +777,7 @@ Variant Array::key(CVarRef search_value, bool strict /* = false */) const {
Array Array::keys(CVarRef search_value /* = null_variant */,
bool strict /* = false */) const {
if (search_value.isNull()) {
if (!search_value.isInitialized()) {
ArrayInit ai(size(), ArrayInit::vectorInit);
for (ArrayIter iter(*this); iter; ++iter) {
ai.set(iter.first());
+6
Ver Arquivo
@@ -115,6 +115,12 @@ class Array : protected ArrayBase {
}
bool valueExists(CVarRef search_value, bool strict = false) const;
Variant key(CVarRef search_value, bool strict = false) const;
/**
* Note that search_value == null_variant will return all keys,
* while search_value == init_null_variant will return only keys
* for pairs where the value is a PHP NULL. (or null-like if strict is false)
*/
Array keys(CVarRef search_value = null_variant, bool strict = false) const;
Array values() const;
+7
Ver Arquivo
@@ -2180,6 +2180,13 @@ bool TestCodeRun::TestArray() {
"test(1);"
"var_dump('three');");
MVCR("<?php "
"$a = array('a' => null, 'b' => 123, 'c' => false);"
"var_dump(array_keys($a));"
"var_dump(array_keys($a, null));"
"var_dump(array_keys($a, null, true));"
);
return true;
}
+33
Ver Arquivo
@@ -356,6 +356,39 @@ bool TestExtArray::test_array_keys() {
")\n");
}
{
Array array = CREATE_MAP3(
"a", init_null_variant,
"b", 123,
"c", false);
VS(f_print_r(f_array_keys(array), true),
"Array\n"
"(\n"
" [0] => a\n"
" [1] => b\n"
" [2] => c\n"
")\n");
VS(f_print_r(f_array_keys(array, init_null_variant), true),
"Array\n"
"(\n"
" [0] => a\n"
" [1] => c\n"
")\n");
// null_variant is uninitialized, so it should act like not passing a value
VS(f_print_r(f_array_keys(array, null_variant), true),
"Array\n"
"(\n"
" [0] => a\n"
" [1] => b\n"
" [2] => c\n"
")\n");
VS(f_print_r(f_array_keys(array, init_null_variant, true), true),
"Array\n"
"(\n"
" [0] => a\n"
")\n");
}
return Count(true);
}