我有两个数组
第一
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]]
感谢您的帮助。
答案 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);
?>
答案 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;