2013-02-11 71 views
1

我想匹配具有特定数字的数组中值的不同组合。将数组中的值与数值匹配

例如:

number = 10 

Array (2, 6, 5, 3, 4) 

比赛将返回:6 + 4 = 102 + 3 + 5 = 10

我可以遍历所有可能的组合,但是否有任何更快,更容易的方式来解决我的问题?

+3

有没有内置的功能,要做到这一点,所以你需要循环....你可以做的唯一的事情来减少循环过滤出数组中的任何值大于你的目标数字,尽管这不适用于你的例子 – 2013-02-11 09:34:48

+0

谢谢!然后我会尝试通过删除不必要的值来优化数组。 – hgerdin 2013-02-11 09:38:15

回答

0

没有与答案一个小问题,它返回的所有组合,即2,3,5和-3,2,5-等。

<?php 

$array = array(2, 6, 5, 3, 4); 

function depth_picker($arr, $temp_string, &$collect) { 
    if ($temp_string != "") 
     $collect []= $temp_string; 

    for ($i=0; $i<sizeof($arr);$i++) { 
     $arrcopy = $arr; 
     $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element 
     if (sizeof($arrcopy) > 0) { 
      depth_picker($arrcopy, $temp_string ."," . $elem[0], $collect); 
     } else { 
      $collect []= $temp_string. "," . $elem[0]; 
     } 
    } 
} 

$collect = array(); 
depth_picker($array, "", $collect); 
foreach($collect as $val) 
{ 
    $sum = array_sum(explode(",",$val)); 
    if($sum == 10){ 
     print_r($val); 
     echo "<br>"; 
    } 
} 

?>