从其他数组获取组合

时间:2018-06-22 07:41:57

标签: php arrays

我有两个数组

第一

array(
0 => 100000,
1 => 50000,
2 => 100000,
3 => 100000);

第二

array(
0 => 150000,
1 => 200000,);

问题是我想从形成每个第二个数组的第一个数组中获取组合。

示例 第二个数组索引0可以由第一个数组索引0和1组成,第二个数组索引1可以由第一个数组索引2和3组成。

我想实现这样的目标

[0 => [0,1] , 1 => [2,3]]

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

一种简单的快速就绪方法是首先对降序的数组进行排序。之后,循环第二个,并从第一个中收集尽可能多的值,直到达到所需的值。

$first = [
    0 => 100000,
    1 => 50000,
    2 => 100000,
    3 => 100000
];

$second = [
    0 => 150000,
    1 => 200000
];

arsort($first);
arsort($second);

$combinations = [];
foreach ($second as $search) {
    $combination = [];
    $sum = 0;
    foreach ($first as $key => $val) {
        if ($sum + $val > $search) continue;
        $sum += $val;
        $combination[] = $key;
        if ($sum == $search) break;
    }
    if ($sum != $search) die("nothing found this way..");
    foreach ($combination as $val) unset($first[$val]);
    $combinations[] = $combination;
}

print_r($combinations);

答案 1 :(得分:0)

这是满足您要求的简单想法。如果有很多,但您需要考虑一下自己

<?php
$arr1 = [0 => 100000,1 => 50000,2 => 100000,3 => 100000];
$arr2 = [0 => 150000,1 => 200000];
//$arr2 = [0 => 250000,1 => 100000];
$count = 0;
$new = array();
for($i=0;$i<count($arr1);$i++){

  if($arr1[$i] == $arr2[$count]){
     $new[$arr2[$count]] = $arr1[$i];
     $count++;
  }else{
    $sum = [$arr1[$i]];
    for($j=$i+1;$j<count($arr1);$j++){
      $sum[] = $arr1[$j];
      if( array_sum($sum) == $arr2[$count]){
        $new[$arr2[$count]] = $sum;
        $count++;
      }
    }
  }  
}
print_r($new);
?>

Output1

Output2

答案 2 :(得分:-1)

尝试以下代码:

$arr = array(
0 => 100000,
1 => 50000,
2 => 100000,
3 => 100000);
$count = $val = 0;
$newArr = [];
foreach($arr as $a){
   $val += $a;
   $count++;
   if($count == 2){
     $newArr[] = $val;
     $val = $count = 0; 
   }
}
print_r($newArr); die;