• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • array_product()

    (PHP 5 >= 5.1.0, PHP 7)

    计算数组中所有值的乘积

    说明

    array_product(array $array):number

    array_product()以整数或浮点数返回一个数组中所有值的乘积。

    参数

    $array

    这个数组。

    返回值

    以整数或浮点数返回一个数组中所有值的乘积。

    更新日志

    版本说明
    5.3.6空数组现在会产生 1,而之前此函数处理空数组会产生 0。

    范例

    Example #1array_product()例子

    <?php
    $a = array(2, 4, 6, 8);
    echo "product(a) = " . array_product($a) . "\n";
    echo "product(array()) = " . array_product(array()) . "\n";
    ?>
    

    以上例程会输出:

    product(a) = 384
    product(array()) = 1
    
    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.
    Here's how you can find a factorial of a any given number with help of range and array_product functions.
    function factorial($num) {
      return array_product(range(1, $num));
    }
    printf("%d", factorial(5)); //120
    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;
    }
    ?>
    
    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)
    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.

    上篇:array_pop()

    下篇:array_push()