数组中的多个组合

时间:2013-08-07 13:17:06

标签: php arrays combinations

我目前有一个数组,数组中的项目数量可以改变。我试图找到数组内部值的不同组合,例如,数组当前具有这些值;

Array ( [0] => 60.0 [1] => 56.8 [2] => 42.08 [3] => 52.16 [4] => 52.8 )

是否可以计算值的数量(在这种情况下为5)然后执行类似的操作;

60.0 + 56.8
60.0 + 56.8 + 42.08
60.0 + 56.8 + 42.08 + 52.16
60.0 + 56.8 + 42.08 + 52.16 + 52.8

但也要显示所有组合,例如;
56.8 + 42.08
42.08 + 52.16

我尝试过使用多维数组,数组移位和其他与数组相关的代码。

4 个答案:

答案 0 :(得分:0)

这个例子回应了给定数组的总和和等值:

$array = array(1,2,3,4);
$total = 0;
$equot = array();
foreach($array as $k=>$a) {     
   $total += $a;
   $equot[] = $a;
   if($k>0) { 
       echo implode("+",$equot)." = $total<br>"; 
   }
}

对于给定的数组,它回应:

  • 1 + 2 = 3
  • 1 + 2 + 3 = 6
  • 1 + 2 + 3 + 4 = 10

如果你想获得所有可能的组合,你应该阅读这个现有的帖子:

PHP: How to get all possible combinations of 1D array?

答案 1 :(得分:0)

$sum = array_sum(array_slice($array, 0, rand(1, count($array))));

更新:

以下代码将接受带有数字的$array,然后显示随机(从第一个开始,没有重复)元素和等式的总和。

$rand = rand(1, count($array));
$sum = array_sum(array_slice($array, 0, $rand));
$equation = implode(' + ', array_slice($array, 0, $rand));

echo $equation. ' = '. $sum;

行动中:Codepad

答案 2 :(得分:0)

这只是打印equotation的一个例子。如果您想要计算,请修改它。

<?php

$array = Array(10, 20, 30, 40, 50);

for($i = 1; $i < count($array); $i++) {
    $sum = "";
    for($x = 0; $x <= $i; $x++) {
        $sum = $sum . $array[$x] . ($x != $i ? " + " : "");
    }
    echo $sum . "\r\n";
}

工作演示:http://codepad.org/ZgkdW2d5

答案 3 :(得分:0)

简单总结一下,然后弹出最后一个元素。

将产生您的预期输出,只是反转。 (如果需要,您可以将结果添加到另一个数组和度假区)

//untestet
while (count($myArray) > 1)){
  $current = 0;
  foreach ($myArray AS $e){
    $current += $e;
  }
  echo "A Result : " . $current;

  //remove last entry
  array_pop($myArray);
}

然而,这将修改您的阵列。你也可以这样做

$myArray = Array(1,2,3);
for ($i=0; $i<count($myArray); $i++){
  $sums_until_index[$i] = 0;
  for ($k=0; $k<=$i; $k++){
    $sums_until_index[$i] += $myArray[$k];  
  }

}

print_r($sums_until_index); //Array ( [0] => 1 [1] => 3 [2] => 6 )