我有两个数组
第一
array(
0 => 100000,
1 => 100000,
2 => 100000,
3 => 100000,
4 => 100000,
5 => 100000,
6 => 100000,
7 => 100000,
8 => 100000
);
第二
array(
0 => 500000,
1 => 250000,
2 => 150000
)
问题是我想在第二个数组中只添加第一个数组中不匹配的值。
示例
第二个数组索引0,即500000,可以通过从第一个数组索引0到4加上得到,这个值将完全相同500000.然后250000和150000不能从加法第一个数组中获得,因为另外到第一个数组,它将没有匹配250000和150000
的确切值我想从第一个数组中获得第二个数组中没有匹配值的值,如下所示:
array(0=>250000, 1=>150000);
感谢您的帮助。
答案 0 :(得分:0)
这是工作示例
$array1 = array(
0 => 100000,
1 => 100000,
2 => 100000,
3 => 100000,
4 => 100000,
5 => 100000,
6 => 100000,
7 => 100000,
8=> 100000
);
$array2 = array(
0 => 500000,
1 => 250000,
2 => 150000
);
$result = array();
foreach ($array2 as $key => $value) {
$total = 0;
$flag = 0;
foreach ($array1 as $k => $v) {
$total += $v;
if($total == $value)
{
$flag = 1;
break;
}
}
if($flag == 0)
{
$result[] = $value;
}
}
echo "<pre>";
print_r($array1);
print_r($array2);
print_r($result);
die();
它给出了结果
Array
(
[0] => 250000
[1] => 150000
)
答案 1 :(得分:0)
<强>输入强>
$array1 = array(
0 => 100000,
1 => 100000,
2 => 100000,
3 => 100000,
4 => 100000,
5 => 100000,
6 => 100000,
7 => 100000,
8=> 100000
);
$array2 = array(
0 => 500000,
1 => 250000,
2 => 150000
);
<强>解决方案强>
$result = array();
foreach($array2 as $r){
$total = 0;
foreach($array1 as $r2){
$total = $total+$r2;
if($total==$r)break;
}
if($total!=$r)$result[] = $r;
$total = 0;
}
echo "<pre>";print_r($result);
<强>输出强>
Array
(
[0] => 250000
[1] => 150000
)
答案 2 :(得分:0)
如果你想支持检查来自第一个数组的任何值组合的总和,而不仅仅是连续值的总和,你需要找到每个成员的总和。第一个阵列的功率集。
此函数将生成所有幂集成员总和的数组:
function generateArraySubsetSums($values)
{
$numValues = count($values);
$numSubsets = 2**$numValues;
$sums = [];
for ($subsetDef = 0; $subsetDef < $numSubsets; $subsetDef++) {
$subsetSum = 0;
for ($elementIndex = 0; $elementIndex < $numValues; $elementIndex++) {
$isElementIncluded = ($subsetDef >> $elementIndex) & 1;
if ($isElementIncluded) {
$subsetSum += $values[$elementIndex];
}
}
$sums[] = $subsetSum;
}
return array_unique($sums);
}
然后,解决你的实际问题:
$first = [100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000];
$second = [500000, 250000, 150000];
$result = array_diff($second, generateArraySubsetSums($first));
这给出了:
[2500000, 1500000]