jmcastagnetto Tue Mar 27 04:57:20 2001 EDT Modified files: /phpdoc/en/functions array.xml Log: documentation of array_filter, array_map, and array_reduce
Index: phpdoc/en/functions/array.xml diff -u phpdoc/en/functions/array.xml:1.61 phpdoc/en/functions/array.xml:1.62 --- phpdoc/en/functions/array.xml:1.61 Fri Mar 16 22:14:56 2001 +++ phpdoc/en/functions/array.xml Tue Mar 27 04:57:19 2001 @@ -200,6 +200,62 @@ </refsect1> </refentry> + <refentry id="function.array-filter"> + <refnamediv> + <refname>array_filter</refname> + <refpurpose>Filters elements of an array using a callback function</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>array_filter</function></funcdef> + <paramdef>array <parameter>input</parameter></paramdef> + <paramdef>mixed + <parameter><optional>callback</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>Array_filter</function> returns an array + containing all the elements of <parameter>input</parameter> + filtered according a callback function. If the + <parameter>input</parameter> is an associative array + the keys are preserved. + </para> + <para> + <example> + <title><function>Array_filter</function> example</title> + <programlisting role="php"> +function odd($var) { + return ($var % 2 == 1); +} + +function even($var) { + return ($var % 2 == 0); +} + +$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); +$array2 = array (6, 7, 8, 9, 10, 11, 12); + +$odd_arr = array_filter($array1, "odd"); +$even_arr = array_filter($array2, "even"); + </programlisting> + </example> + </para> + <para> + This makes <varname>$odd_arr</varname> have + <literal>array ("a"=>1, "c"=>3, "e"=>5);</literal>, + and <varname>$even_arr</varname> have + <literal>array (6, 8, 10, 12);</literal>, + </para> + <para> + See also <function>array_map</function>, + <function>array_reduce</function>. + </para> + </refsect1> + </refentry> + <refentry id="function.array-flip"> <refnamediv> <refname>array_flip</refname> @@ -342,6 +398,184 @@ </refsect1> </refentry> + <refentry id="function.array-map"> + <refnamediv> + <refname>array_map</refname> + <refpurpose>Applies the callback to the elements of the given arrays</refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>array_map</function></funcdef> + <paramdef>mixed <parameter>callback</parameter></paramdef> + <paramdef>array <parameter>arr1</parameter></paramdef> + <paramdef>array + <parameter><optional>arr2...</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>Array_map</function> returns an array + containing all the elements of <parameter>arr1</parameter> + after applying the callback function to each one. + The number of parameters that the callback function accepts should + match the number of arrays passed to the <function>array_map</function> + </para> + <para> + <example> + <title><function>Array_map</function> example</title> + <programlisting role="php"> +function cube($n) { + return $n*$n*$n; +} + +$a = array(1, 2, 3, 4, 5); +$b = array_map("cube", $a); + </programlisting> + </example> + </para> + <para> + This will result in <varname>$b</varname> containing + <literal>array (1, 8, 27, 64, 125);</literal> + </para> + <para> + <example> + <title><function>Array_filter</function> - using more arrays</title> + <programlisting role="php"> +function show_Spanish($n, $m) { + return "The number $n is called $m in Spanish"; +} + +function map_Spanish($n, $m) { + return array ($n => $m); +} + +$a = array(1, 2, 3, 4, 5); +$b = array("uno", "dos", "tres", "cuatro", "cinco"); + +$c = array_map("show_Spanish", $a, $b); + +print_r($c); + +// will output: +// Array +// ( +// [0] => The number 1 is called uno in Spanish +// [1] => The number 2 is called dos in Spanish +// [2] => The number 3 is called tres in Spanish +// [3] => The number 4 is called cuatro in Spanish +// [4] => The number 5 is called cinco in Spanish +// ) + +$d = array_map("map_Spanish", $a , $b); + +print_r($d); + +// will output: +// Array +// ( +// [0] => Array +// ( +// [1] => uno +// ) +// +// [1] => Array +// ( +// [2] => dos +// ) +// +// [2] => Array +// ( +// [3] => tres +// ) +// +// [3] => Array +// ( +// [4] => cuatro +// ) +// +// [4] => Array +// ( +// [5] => cinco +// ) +// +// ) + </programlisting> + </example> + </para> + <para> + Usually when using two or more arrays, they should be of equal length + because the callback function is applied in parallel to the corresponding + elements. + If the arrays are of unequal length, the shortest one will be extended + with empty elements. + </para> + <para> + An interesting use of this function is to construct an array of arrays, + which can be easily performed by using <literal>null</literal> + as the name of the callback function + </para> + <para> + <example> + <title><function>Array_map</function> - creating an array of arrays</title> + <programlisting role="php"> +$a = array(1, 2, 3, 4, 5); +$b = array("one", "two", "three", "four", "five"); +$c = array("uno", "dos", "tres", "cuatro", "cinco"); + +$d = array_map(null, $a, $b, $c); +print_r($d); + +// will output: +// Array +// ( +// [0] => Array +// ( +// [0] => 1 +// [1] => one +// [2] => uno +// ) +// +// [1] => Array +// ( +// [0] => 2 +// [1] => two +// [2] => dos +// ) +// +// [2] => Array +// ( +// [0] => 3 +// [1] => three +// [2] => tres +// ) +// +// [3] => Array +// ( +// [0] => 4 +// [1] => four +// [2] => cuatro +// ) +// +// [4] => Array +// ( +// [0] => 5 +// [1] => five +// [2] => cinco +// ) +// +// ) + </programlisting> + </example> + </para> + <para> + See also <function>array_filter</function>, + <function>array_reduce</function>. + </para> + </refsect1> + </refentry> + <refentry id="function.array-merge"> <refnamediv> <refname>array_merge</refname> @@ -787,6 +1021,68 @@ The second parameter was added in PHP 4.0.3. </para> </note> + </refsect1> + </refentry> + + <refentry id="function.array-reduce"> + <refnamediv> + <refname>array_reduce</refname> + <refpurpose> + Iteratively reduce the array to a single value using a callback function + </refpurpose> + </refnamediv> + <refsect1> + <title>Description</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>array_reduce</function></funcdef> + <paramdef>array <parameter>input</parameter></paramdef> + <paramdef>mixed <parameter>callback</parameter></paramdef> + <paramdef>int + <parameter><optional>initial</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + <function>Array_reduce</function> applies iteratively the + <parameter>callback</parameter> function to the elements of the + array <parameter>input</parameter>, so as to reduce the array to + a single value. If the optional <parameter>intial</parameter> is + avaliable, it will be used at the beginning of the process, or as + a final result in case the array is empty. + </para> + <para> + <example> + <title><function>Array_reduce</function> example</title> + <programlisting role="php"> +function rsum($v, $w) { + $v += $w; + return $v; +} + +function rmul($v, $w) { + $v *= $w; + return $v; +} + +$a = array(1, 2, 3, 4, 5); +$x = array(); +$b = array_reduce($a, "rsum"); +$c = array_reduce($a, "rmul", 10); +$d = array_reduce($x, "rsum", 1); + </programlisting> + </example> + </para> + <para> + This will result in <varname>$b</varname> containing + <literal>15</literal>, <varname>$c</varname> containing + <literal>1200</literal> (= 1*2*3*4*5*10), and <varname>$d</varname> + containing <literal>1</literal>. + </para> + <para> + See also <function>array_filter</function>, + <function>array_map</function>. + </para> </refsect1> </refentry>