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

相关问题