2013-08-07 74 views
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 +

我已經使用多維數組,數組移位和其它陣列相關的代碼試圖。

+0

計算元素並做一個for循環。 –

+0

按組合你是指同一訂單的組合?或隨機順序? Like:60 + 56 + 42,然後是60 + 42 + 56,然後是42 + 56 + 60,等等...... – Atrakeur

+0

給我們展示一些你剛剛提到的代碼... –

回答

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: How to get all possible combinations of 1D array?

+0

是的,但不像運行總數,更多的是顯示每個組合,例如;數組(1,2,3,4),我會尋找答案; 1 + 2然後1 + 2 + 3然後1 + 2 + 3 + 4等 – Alex

+0

@AzzerB看到我的更新。它完全迴應你所說的話。 – steven

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

UPDATE:

下面的代碼將接受該號碼的$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

+0

是否可以在旁邊顯示等式? – Alex

+0

@AzzerB:好的。查看更新。 –

+0

@AzzerB:現在有一個工作示例。 –

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

+0

是否有可能顯示所有的組合,因此它顯示10 + 20 + 30,但它也可以顯示20 + 30? – Alex

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)