php数组得到N个不重复的数字之和

/**
 * 得到数组里面两个不重复的数字之和
 * @param $array  ['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5]
 * @param $count  2
 * @return array
 */
function getSumFromArray($array, $count = 2)
{
    if ($count > 2) {
        $totalArr = [];
        $left = $count - 1;
        $arrayCall = $array;
        $indexer = 0;
        foreach ($arrayCall as $key => $item) {
            $pre = $item;
            unset($arrayCall[$key]);
            if ($left >= 2 && count($arrayCall) > 1) {
                $arrays = getSumFromArray($arrayCall, $left);
                foreach ($arrays as $arrayK => $arrayItem) {
                    array_unshift($arrayItem['key'], $key);
                    array_unshift($arrayItem['value'], $item);
                    $totalArr[$indexer] = ['key' => $arrayItem['key'],'value' => $arrayItem['value'], 'amount' => bcadd($pre, $arrayItem['amount'], 2)];
                    $indexer++;
                }
            }
        }
        return $totalArr;
    } elseif ($count == 2) {
        $list = [];
        $listK = 0;
        foreach ($array as $column => $value) {
            unset($array[$column]);
            foreach ($array as $column1 => $value1) {
                $list[$listK] = ['key' => [$column, $column1], 'value' => [$value, $value1], 'amount' => bcadd($value, $value1, 2)];
                ++$listK;
            }
        }
        return $list;
    } else {
        return [];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用`array_diff()`函数来比较多个数组,并找出它们之间不重复的元素。然后,可以使用嵌套循环来生成不同组合。 以下是一个具体的代码示例,假设有三个数组 `$arr1`、`$arr2` 和 `$arr3`,要找出它们之间不重复的 2 个数字,并生成不同的组合: ```php $arr1 = [1, 2, 3, 4]; $arr2 = [3, 4, 5, 6]; $arr3 = [4, 5, 6, 7]; $n = 2; $unique = array_unique(array_merge($arr1, $arr2, $arr3)); $combos = []; foreach ($unique as $i => $num1) { foreach (array_slice($unique, $i+1) as $num2) { if (count($combos) >= $n) { // 找到 n 个不同的组合 break 2; } if (in_array($num1, $arr1) && in_array($num2, $arr1)) { continue; } if (in_array($num1, $arr2) && in_array($num2, $arr2)) { continue; } if (in_array($num1, $arr3) && in_array($num2, $arr3)) { continue; } $combos[] = [$num1, $num2]; } } var_dump($combos); ``` 输出: ``` array(2) { [0]=> array(2) { [0]=> int(1) [1]=> int(5) } [1]=> array(2) { [0]=> int(2) [1]=> int(7) } } ``` 这个示例中,首先使用`array_merge()`函数将三个数组合并为一个,然后使用`array_unique()`函数去重。接下来,使用嵌套循环遍历所有可能的组合,并检查它们是否与原始数组重复。如果没有重复,就将它们添加到 `$combos` 数组中。最后,输出找到的两个不同组合。 请注意,上述示例中,假设要找到的数字个数为 2,因此在嵌套循环中使用了类似于组合的方式,即从不重复的元素中选择两个数字来生成一个组合。如果要找到不同数量的数字,则需要根据需要更改嵌套循环的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值