【问题标题】:multiple combinations in an Array数组中的多个组合
【发布时间】:2013-08-07 22:21:59
【问题描述】:

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

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
等等

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

【问题讨论】:

  • 计算元素并创建一个for循环。
  • 组合是指相同顺序的组合?还是随机顺序?比如:60+56+42,然后是 60+42+56,然后是 42+56+60,等等……
  • 向我们展示您刚才提到的一些代码...
  • 换个说法,我只想看每个组合的一个版本,所以我想看 A+B+C ,但是 A+C+B 无所谓

标签: php arrays combinations


【解决方案1】:

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

将产生您预期的输出,只是相反。 (如果需要,您可以将结果添加到另一个数组并使用)

//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 )

【讨论】:

    【解决方案2】:

    这只是打印 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

    【讨论】:

    • 是否可以显示所有组合,使其显示 10 + 20 + 30,但也可以显示 20 + 30?
    【解决方案3】:
    $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

    【讨论】:

    • 谢谢,我目前正在尝试实现这个
    【解决方案4】:

    此示例回显给定数组的总和和 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: How to get all possible combinations of 1D array?

    【讨论】:

    • 是的,但与其说是运行总数,不如说是每个组合的展示,例如; array(1,2,3,4) 我会寻找答案; 1 + 2 然后 1 + 2 + 3 然后 1 + 2 + 3 + 4 等等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多