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或其他包含自身的计算

4

3 回答 3

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] 相同)

于 2013-08-07T08:42:51.503 回答
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);
于 2013-08-07T08:49:22.947 回答
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

看到它工作

于 2013-08-07T08:52:02.757 回答