从其他数组的添加中获取无法匹配的值

时间:2018-04-12 04:05:43

标签: php arrays

我有两个数组

第一

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);

感谢您的帮助。

3 个答案:

答案 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]