From: Ben Ramsey Date: Fri, 11 Jan 2013 23:09:34 +0000 (-0600) Subject: array_column: Set array_pluck as an alias for array_column X-Git-Tag: php-5.5.0beta1~3^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a1876b6846898724f564208f78281dfd8ce07112;p=php array_column: Set array_pluck as an alias for array_column --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 5e123528c3..6e1835dc60 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -3306,6 +3306,7 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(array_values, arginfo_array_values) PHP_FE(array_count_values, arginfo_array_count_values) PHP_FE(array_column, arginfo_array_column) + PHP_FALIAS(array_pluck, array_column, arginfo_array_column) PHP_FE(array_reverse, arginfo_array_reverse) PHP_FE(array_reduce, arginfo_array_reduce) PHP_FE(array_pad, arginfo_array_pad) diff --git a/ext/standard/tests/array/array_column_pluck_alias.phpt b/ext/standard/tests/array/array_column_pluck_alias.phpt new file mode 100644 index 0000000000..4bd251a7f2 --- /dev/null +++ b/ext/standard/tests/array/array_column_pluck_alias.phpt @@ -0,0 +1,307 @@ +--TEST-- +Test array_pluck() function: basic functionality +--FILE-- + 1, + 'first_name' => 'John', + 'last_name' => 'Doe' + ), + array( + 'id' => 2, + 'first_name' => 'Sally', + 'last_name' => 'Smith' + ), + array( + 'id' => 3, + 'first_name' => 'Jane', + 'last_name' => 'Jones' + ) +); + +echo "-- first_name column from recordset --\n"; +var_dump(array_pluck($records, 'first_name')); + +echo "-- id column from recordset --\n"; +var_dump(array_pluck($records, 'id')); + +echo "-- last_name column from recordset, keyed by value from id column --\n"; +var_dump(array_pluck($records, 'last_name', 'id')); + +echo "-- last_name column from recordset, keyed by value from first_name column --\n"; +var_dump(array_pluck($records, 'last_name', 'first_name')); + +echo "\n*** Testing multiple data types ***\n"; +$file = basename(__FILE__); +$fh = fopen($file, 'r', true); +$values = array( + array( + 'id' => 1, + 'value' => new stdClass + ), + array( + 'id' => 2, + 'value' => 34.2345 + ), + array( + 'id' => 3, + 'value' => true + ), + array( + 'id' => 4, + 'value' => false + ), + array( + 'id' => 5, + 'value' => null + ), + array( + 'id' => 6, + 'value' => 1234 + ), + array( + 'id' => 7, + 'value' => 'Foo' + ), + array( + 'id' => 8, + 'value' => $fh + ) +); +var_dump(array_pluck($values, 'value')); +var_dump(array_pluck($values, 'value', 'id')); + +echo "\n*** Testing numeric column keys ***\n"; +$numericCols = array( + array('aaa', '111'), + array('bbb', '222'), + array('ccc', '333') +); +var_dump(array_pluck($numericCols, 1)); +var_dump(array_pluck($numericCols, 1, 0)); + +echo "\n*** Testing failure to find specified column ***\n"; +var_dump(array_pluck($numericCols, 2)); +var_dump(array_pluck($numericCols, 'foo')); +var_dump(array_pluck($numericCols, 0, 'foo')); + +echo "\n*** Testing single dimensional array ***\n"; +$singleDimension = array('foo', 'bar', 'baz'); +var_dump(array_pluck($singleDimension, 1)); + +echo "\n*** Testing columns not present in all rows ***\n"; +$mismatchedColumns = array( + array('a' => 'foo', 'b' => 'bar', 'e' => 'bbb'), + array('a' => 'baz', 'c' => 'qux', 'd' => 'aaa'), + array('a' => 'eee', 'b' => 'fff', 'e' => 'ggg'), +); +var_dump(array_pluck($mismatchedColumns, 'c')); +var_dump(array_pluck($mismatchedColumns, 'c', 'a')); +var_dump(array_pluck($mismatchedColumns, 'a', 'd')); +var_dump(array_pluck($mismatchedColumns, 'a', 'e')); +var_dump(array_pluck($mismatchedColumns, 'b')); +var_dump(array_pluck($mismatchedColumns, 'b', 'a')); + +echo "\n*** Testing use of object converted to string ***\n"; +class Foo +{ + public function __toString() + { + return 'last_name'; + } +} +class Bar +{ + public function __toString() + { + return 'first_name'; + } +} +$f = new Foo(); +$b = new Bar(); +var_dump(array_pluck($records, $f)); +var_dump(array_pluck($records, $f, $b)); + +echo "Done\n"; +?> +--EXPECTF-- +*** Testing array_pluck() : basic functionality *** +-- first_name column from recordset -- +array(3) { + [0]=> + string(4) "John" + [1]=> + string(5) "Sally" + [2]=> + string(4) "Jane" +} +-- id column from recordset -- +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} +-- last_name column from recordset, keyed by value from id column -- +array(3) { + [1]=> + string(3) "Doe" + [2]=> + string(5) "Smith" + [3]=> + string(5) "Jones" +} +-- last_name column from recordset, keyed by value from first_name column -- +array(3) { + ["John"]=> + string(3) "Doe" + ["Sally"]=> + string(5) "Smith" + ["Jane"]=> + string(5) "Jones" +} + +*** Testing multiple data types *** +array(8) { + [0]=> + object(stdClass)#1 (0) { + } + [1]=> + float(34.2345) + [2]=> + bool(true) + [3]=> + bool(false) + [4]=> + NULL + [5]=> + int(1234) + [6]=> + string(3) "Foo" + [7]=> + resource(5) of type (stream) +} +array(8) { + [1]=> + object(stdClass)#1 (0) { + } + [2]=> + float(34.2345) + [3]=> + bool(true) + [4]=> + bool(false) + [5]=> + NULL + [6]=> + int(1234) + [7]=> + string(3) "Foo" + [8]=> + resource(5) of type (stream) +} + +*** Testing numeric column keys *** +array(3) { + [0]=> + string(3) "111" + [1]=> + string(3) "222" + [2]=> + 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) { +} +array(0) { +} +array(3) { + [0]=> + string(3) "aaa" + [1]=> + string(3) "bbb" + [2]=> + string(3) "ccc" +} + +*** Testing single dimensional array *** +array(0) { +} + +*** Testing columns not present in all rows *** +array(1) { + [0]=> + string(3) "qux" +} +array(1) { + ["baz"]=> + string(3) "qux" +} +array(3) { + [0]=> + string(3) "foo" + ["aaa"]=> + string(3) "baz" + [1]=> + string(3) "eee" +} +array(3) { + ["bbb"]=> + string(3) "foo" + [0]=> + string(3) "baz" + ["ggg"]=> + string(3) "eee" +} +array(2) { + [0]=> + string(3) "bar" + [1]=> + string(3) "fff" +} +array(2) { + ["foo"]=> + string(3) "bar" + ["eee"]=> + string(3) "fff" +} + +*** Testing use of object converted to string *** +array(3) { + [0]=> + string(3) "Doe" + [1]=> + string(5) "Smith" + [2]=> + string(5) "Jones" +} +array(3) { + ["John"]=> + string(3) "Doe" + ["Sally"]=> + string(5) "Smith" + ["Jane"]=> + string(5) "Jones" +} +Done diff --git a/ext/standard/tests/array/array_column_pluck_alias_error.phpt b/ext/standard/tests/array/array_column_pluck_alias_error.phpt new file mode 100644 index 0000000000..2f98ff5cad --- /dev/null +++ b/ext/standard/tests/array/array_column_pluck_alias_error.phpt @@ -0,0 +1,98 @@ +--TEST-- +Test array_pluck() function: error conditions +--FILE-- + +--EXPECTF-- +*** Testing array_pluck() : error conditions *** + +-- Testing array_pluck() function with Zero arguments -- + +Warning: array_pluck() expects at least 2 parameters, 0 given in %s on line %d +NULL + +-- Testing array_pluck() function with One argument -- + +Warning: array_pluck() expects at least 2 parameters, 1 given in %s on line %d +NULL + +-- Testing array_pluck() function with string as first parameter -- + +Warning: array_pluck() expects parameter 1 to be array, string given in %s on line %d +NULL + +-- Testing array_pluck() function with int as first parameter -- + +Warning: array_pluck() expects parameter 1 to be array, integer given in %s on line %d +NULL + +-- Testing array_pluck() column key parameter should be a string or an integer (testing bool) -- + +Warning: array_pluck(): The column key should be either a string or an integer in %s on line %d +bool(false) + +-- Testing array_pluck() column key parameter should be a string or integer (testing float) -- + +Warning: array_pluck(): The column key should be either a string or an integer in %s on line %d +bool(false) + +-- Testing array_pluck() column key parameter should be a string or integer (testing array) -- + +Warning: array_pluck(): The column key should be either a string or an integer in %s on line %d +bool(false) + +-- Testing array_pluck() index key parameter should be a string or an integer (testing bool) -- + +Warning: array_pluck(): The index key should be either a string or an integer in %s on line %d +bool(false) + +-- Testing array_pluck() index key parameter should be a string or integer (testing float) -- + +Warning: array_pluck(): The index key should be either a string or an integer in %s on line %d +bool(false) + +-- Testing array_pluck() index key parameter should be a string or integer (testing array) -- + +Warning: array_pluck(): The index key should be either a string or an integer in %s on line %d +bool(false) +Done