ConFoo: Call for paper is now Open

array_product

(PHP 5 >= 5.1.0)

array_productCalcule le produit des valeurs du tableau

Description

number array_product ( array $array )

array_product() retourne le produit des valeurs du tableau array.

Liste de paramètres

array

Le tableau.

Valeurs de retour

Retourne le produit, sous la forme d'un entier ou d'un nombre décimal.

Historique

Version Description
5.3.6 Le produit d'un tableau vide est maintenant 1, alors qu'auparavant, cette fonction retournait 0 pour un tableau vide.

Exemples

Exemple #1 Exemple avec array_product()

<?php

$a 
= array(2468);
echo 
"produit(a) = " array_product($a) . "\n";
echo 
"product(array()) = " array_product(array()) . "\n";

?>

L'exemple ci-dessus va afficher :

produit(a) = 384
product(array()) = 1

add a note add a note

User Contributed Notes 4 notes

up
2
Marcel G
3 years ago
You can use array_product to calculate the factorial of n:
<?php
function factorial( $n )
{
  if(
$n < 1 ) $n = 1;
  return
array_product( range( 1, $n ));
}
?>

If you need the factorial without having array_product available, here is one:
<?php
function factorial( $n )
{
  if(
$n < 1 ) $n = 1;
  for(
$p++; $n; ) $p *= $n--;
  return
$p;
}
?>
up
1
Andre D
8 years ago
This function can be used to test if all values in an array of booleans are TRUE.

Consider:

<?php

function outbool($test)
{
    return (bool)
$test;
}

$check[] = outbool(TRUE);
$check[] = outbool(1);
$check[] = outbool(FALSE);
$check[] = outbool(0);

$result = (bool) array_product($check);
// $result is set to FALSE because only two of the four values evaluated to TRUE

?>

The above is equivalent to:

<?php

$check1
= outbool(TRUE);
$check2 = outbool(1);
$check3 = outbool(FALSE);
$check4 = outbool(0);

$result = ($check1 && $check2 && $check3 && $check4);

?>

This use of array_product is especially useful when testing an indefinite number of booleans and is easy to construct in a loop.
up
0
Jimmy PHP
4 months ago
array_product() can be used to implement a simple boolean AND search

<?php
$args
= array('first_name'=>'Bill','last_name'=>'Buzzard');
$values[] = array('first_name'=>'Brenda','last_name'=>'Buzzard');
$values[] = array('first_name'=>'Victor','last_name'=>'Vulture');
$values[] = array('first_name'=>'Bill','last_name'=>'Blue Jay');
$values[] = array('first_name'=>'Bill','last_name'=>'Buzzard');

$result = search_for($values,$args);
var_dump($result);exit;

function
search_for($array,$args) {
   
$results = array();
    foreach (
$array as $row) {
       
$found = false;
       
$hits = array();
        foreach (
$row as $k => $v) {
            if (
array_key_exists($k,$args)) $hits[$k] = ($args[$k] == $v);
        }

       
$found = array_product($hits);
        if (!
in_array($row,$results) && true == $found) $results[] = $row;
    }

    return
$results;
}
?>

Output:

array (size=1)
  0 =>
    array (size=2)
      'first_name' => string 'Bill' (length=4)
      'last_name' => string 'Buzzard' (length=7)
up
0
pqpqpq at wanadoo dot nl
7 years ago
An observation about the _use_ of array_product with primes:

$a=$arrayOfSomePrimes=(2,3,11);
              // 2 being the first prime (these days)

$codeNum=array_product($a); // gives 66 (== 2*3*11)

echo "unique product(\$a) = " . array_product($a) . "\n";

The 66 can (only) be split into its original primes,
which can be transformed into their place in the row of primes (2,3,5,7,11,13,17,19...)  giving (1,2,3,4,5,6,7,8...)

The 66 gives the places {1,2,5} in the row of primes. The number "66" is unique as a code for {1,2,5}

So you can define the combination of table-columns {1,2,5} in "66". The bigger the combination, the more efficient in memory/transmission, the less in calculation.
To Top