0

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

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

4 回答 4

0

此示例回显给定数组的总和和 equotation:

$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:如何获得一维数组的所有可能组合?

于 2013-08-07T13:20:31.703 回答
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

于 2013-08-07T13:40:39.840 回答
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 )
于 2013-08-07T13:40:46.013 回答
0
$sum = array_sum(array_slice($array, 0, rand(1, count($array))));

更新:

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

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

echo $equation. ' = '. $sum;

在行动:键盘

于 2013-08-07T13:23:42.030 回答