2013-08-07 27 views
0

我目前加載數組到一個數組中,這些總是不同的數字,可以有任何數量的他們,這裏是一個例子;檢查每個可能的數字組合對一個

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

我試圖計算出每一個可能出走到這陣,我只是需要將所有數字加在一起(除了序號和自身),並嘗試匹配一個數字,例如:

60.0 + 56.8, 60.0 + 42.08, 60.0 + 52.16 等等等等

然後到 56.8 + 60.0, 56.8 + 42.08 等等等等

但不包括; 60.0 + 60.0或其他的計算方法,包括themselfs

回答

1

試試這個..

$str = Array ("60.0","56.8","42.08","52.16","52.8"); 
$result = array(); 
foreach ($str as $v){ 
    foreach($str as $d){ 
     if($d!=$v){ 

      $result[]=$v."+".$d; 
     } 
    } 
} 

$strResult = implode(",",$result); 
print_r($strResult); 
+0

我發現這個答案是最適合的,非常感謝你@shark,我有一個問題,就是有可能修改這段代碼來獲取一個參數來控制它所做的總和,它目前將兩個值相加,但是有可能說出4個值,然後計算出來?再次感謝你 – Alex

1

我可以提供通過分組的源值來對解決方案,如:

function array_repeat_pair($rgData) 
{ 
    $rgRepeats = array(); 
    for($i=0;$i<count($rgData);$i++) 
    { 
     for($j=0;$j<count($rgData);$j++) 
     { 
      if($i!=$j && !array_key_exists($i*$i+$j*$j, $rgRepeats)) 
      { 
       $rgRepeats[$i*$i+$j*$j] = [$rgData[$i], $rgData[$j]]; 
      } 
     } 
    } 
    return $rgRepeats; 
} 

$rgData = [60.0, 52.7, 54.2, 45.8]; 
$rgResult = array_map('array_sum', array_repeat_pair($rgData)); 
//var_dump($rgResult); 

不知道這是否是你所需要的東西(即對[A,B ]被視爲等同於[b,A])

0

我不能在此刻徹底檢查,但我相信這將工作: -

$array = array(60,56.8,42.08,52.16,52.8); 

while(count($array) > 0){ 
    $first = array_shift($array); 
    foreach($array as $value){ 
     $result[] = $first + $value; 
    } 
} 

輸出: -

array (size=10) 
    0 => float 116.8 
    1 => float 102.08 
    2 => float 112.16 
    3 => float 112.8 
    4 => float 98.88 
    5 => float 108.96 
    6 => float 109.6 
    7 => float 94.24 
    8 => float 94.88 
    9 => float 104.96 

See it working

相關問題