suche nach in der

array_replace_recursive> <array_rand
Last updated: Fri, 18 May 2012

view this page in

array_reduce

(PHP 4 >= 4.0.5, PHP 5)

array_reduceIterative Reduktion eines Arrays zu einem Wert mittels einer Callbackfunktion

Beschreibung

mixed array_reduce ( array $input , callback $function [, mixed $initial = NULL ] )

array_reduce() wendet die Funktion function iterativ auf die Elemente des Arrays input so an, dass das Array auf einen einzigen Wert reduziert wird.

Parameter-Liste

input

Das Eingabe-Array.

function

Die Callbackfunktion.

initial

Ist der optionale Parameter intial angegeben, wird er am Anfang des Prozesses benutzt oder als Resultat verwendet, sollte das Array leer sein.

Rückgabewerte

Gibt den sich ergebenden Wert zurück.

Falls das Array leer ist und initial nicht angegeben wurde, so wird array_reduce() NULL zurückgeben.

Changelog

Version Beschreibung
5.3.0 Der von initial akzeptierte Datentyp wurde zu Mixed geändert, vorher war dies Integer.

Beispiele

Beispiel #1 array_reduce()-Beispiel

<?php
function rsum($v$w)
{
    
$v += $w;
    return 
$v;
}

function 
rmul($v$w)
{
    
$v *= $w;
    return 
$v;
}

$a = array(12345);
$x = array();
$b array_reduce($a"rsum");
$c array_reduce($a"rmul"10);
$d array_reduce($x"rsum""Keine Daten für die Reduktion");
?>

Dies wird dazu führen, dass $b den Wert 15 beinhaltet, $c den Wert 1200 (= 10*1*2*3*4*5) und $d den Text Keine Daten für die Reduktion enthält.

Siehe auch



add a note add a note User Contributed Notes
array_reduce
yuki [dot] kodama [at] gmail [dot] com
31-Jan-2007 05:56
This code will reduce array deeply.

<?php
function print_s($s) {
    return
is_null($s) ? "NULL" : (is_array($s) ? "Array" : ($s ? "TRUE" : "FALSE"));
}
function
r_and_dp($a, $b) {
    echo
"phase1:" . print_s($a) . "," . print_s($b) . "<br>\n";
    if(
is_array($a)) {
       
$a = array_reduce($a, "r_and_dp");
    }
    if(
is_array($b)) {
       
$b = array_reduce($b, "r_and_dp");
    }
    echo
"phase2:" . print_s($a) . "," . print_s($b) . "<br>\n";
   
$a = is_null($a) ? TRUE : $a;
   
$b = is_null($b) ? TRUE : $b;
    echo
"phase3:" . print_s($a) . "," . print_s($b) . "<br>\n";
    return
$a && $b;
}
$bools = array(TRUE, array(FALSE, TRUE), TRUE);
echo
print_s(array_reduce($bools, "r_and_dp")) . "<br>\n";

// result: FALSE
?>

When using boolean, you have to carefully set an "initial" argument.

<?php
function r_or_dp($a, $b) {
    if(
is_array($a)) {
       
$a = array_reduce($a, "r_or_dp");
    }
    if(
is_array($b)) {
       
$b = array_reduce($b, "r_or_dp");
    }
    return (
is_null($a) ? FALSE : $a) || (is_null($b) ? FALSE : $b);
}
?>
bdechka at yahoo dot ca
10-Jan-2007 09:57
The above code works better this way.

<?php
function reduceToTable($html, $p) {
  
$html .= "<TR><TD><a href=\"$p.html\">$p</a></td></tr>\n";
   return
$html;
}

$list = Array("page1", "page2", "page3");

$tab = array_reduce($list, "reduceToTable");
echo
"<table>".$tab . "</table>\n";
?>
marcel dot oehler at kubusmedia dot com
08-Feb-2006 04:26
I've just experienced some really strange behaviour of array_reduce in PHP 5.0.4:

$result = array( 0, 17, 0, 0, 33, 0, 0, 0, 0, 50);
$total = array_reduce( $result, "sumCalc", 0);

function sumCalc( $a, $b){
    return $a + $b;
}

and $total equals to 83!

I know, this could be done easier, but it should work nevertheless. Has anybody experienced something similar? I will avoid using array_reduce in the future...
Seanj.jcink.com
05-Jan-2006 03:23
The code posted below by bishop to count the characters of an array is simply... erm... well useless to me...

$array=Array("abc","de","f");
strlen(implode("",$array)); //6

works; and is much smaller. Probably much faster too.
ildar [DASH] sh [AT] mail [DOT] ru
30-Nov-2005 07:02
in rare cases when an array is a set of numeric values and result is one of sum or product of numbers the next examples may be useful

<?php

// sum of array items
echo eval('return ' . implode('+', $nums) . ';');

// product of array items
echo eval('return ' . implode('*', $nums) . ';');

?>

the reason of these codes is omitting of single used per script of callbacks
david dot tulloh at infaze dot com dot au
23-Jun-2005 10:18
The code supplied by cuntbubble is unfortunately incorrect.

Running it I got the output:
0<TR><TD><a href="page1.html">page1</a></td>
<TR><TD><a href="page2.html">page2</a></td>
<TR><TD><a href="page3.html">page3</a></td>
</table>

So php, not finding an integer, used int(0) to start the process.  I've tested to confirm this.
bishop
01-May-2004 05:19
Count the total number of characters in an array of strings:

<?php
$lines
= array ('abc', 'd', 'ef');
$totalChars = array_reduce($lines, create_function('$v,$w','return $v + strlen($w);'), 0);
// $totalChars === 6
?>
tonicpeddler at aol dot com
02-Nov-2002 04:17
in response to php dot net at cuntbubble dot com

actually when you pass a value to a function that accepts a specific data type, php automatically evaluates that value as the data type expected
php dot net at cuntbubble dot com
18-Jan-2002 05:08
There is an error/misleading item in the documentation

[, int initial]

int is not constrained to an integer, it can be any data type (although I've not tested ALL data types)

and $v is the cumulative part, the current value of the reduction.

and I'll take the liberty to add another example, as used in my code

<?php
function reduceToTable($html, $p) {
   
$html .= "<TR><TD><a href=\"$p.html\">$p</a></td>\n";
    return
$html;
}

$list = Array("page1", "page2", "page3");

$tab = array_reduce($list, "reduceToTable", "<table>\n");
echo
$tab . "</table>\n";
?>

hmm, getting stuff on one line sure is tricky, it get's wordwrapped on the char count in html so &gt; counts as 4 chars not one so by the time you've counted "< you've used up 8 chars
If it get's through moderation could someone please make it look ok :)

array_replace_recursive> <array_rand
Last updated: Fri, 18 May 2012