2013-08-07 4 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

Подсчитайте элементы и сделайте цикл. –

+0

По сочетанию вы подразумеваете комбинации с одинаковым порядком? или со случайным порядком? Нравится: 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

, если вы Li ке, чтобы получить все возможные комбинации вы должны прочитать эту существующую тему:

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

+0

Да, но не так много, как общее количество, например, показать каждую комбинацию; array (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)