PHP 返回一维数组中,有序组合成 N 个元素的数组

本文介绍了一种用于计算一维数组中组合成2个有序不重复元素组合数组的通用函数,适用于商品捆绑促销等场景,实现商品两两组合或多商品组合。
个人链接:科技始终来源于人性

最近业务上遇到一个商品捆绑促销的问题,需要计算出一维数组中组合成2个有序不重复的元素组合数组。

于是总结了一下,写了一个可以通用算多一维数组中,组成有序组合数组的函数。

【函数方法】
/**
 * 返回一维数组中,有序组合成 $count 个元素的数组
 * @author Eric
 * @param $arr 原数组
 * @param $collect 组成新数组
 * @param int $count 新数组单元素组合个数
 * @return array
 */
function array_picker($arr,&$collect,$count=2) {
    if (empty($arr)) {
        return $collect;
    }
    static $temp_string;
    for ($i=0; $i < count($arr); $i++) {
        $temp_string[] = $arr[$i];
        if(count($temp_string) < $count) {
            array_picker(array_slice($arr,$i+1),$collect,$count);
        }
        if(count($temp_string) == $count) {
            $collect[] = implode(',',$temp_string);
        }
        array_pop($temp_string);
    }
    return $collect;
}
【运行结果】
原数组
array (size=5)
  0 => string 'Alpha' (length=5)
  1 => string 'Beta' (length=4)
  2 => string 'Gamma' (length=5)
  3 => string 'Sigma' (length=5)
  4 => string 'Lamda' (length=5)

结果数组
array (size=10)
  0 => string 'Alpha,Beta,Gamma' (length=16)
  1 => string 'Alpha,Beta,Sigma' (length=16)
  2 => string 'Alpha,Beta,Lamda' (length=16)
  3 => string 'Alpha,Gamma,Sigma' (length=17)
  4 => string 'Alpha,Gamma,Lamda' (length=17)
  5 => string 'Alpha,Sigma,Lamda' (length=17)
  6 => string 'Beta,Gamma,Sigma' (length=16)
  7 => string 'Beta,Gamma,Lamda' (length=16)
  8 => string 'Beta,Sigma,Lamda' (length=16)
  9 => string 'Gamma,Sigma,Lamda' (length=17)


【总结】

便利店销售系统中,商品捆绑优惠活动用到了商品组合的计算,也就是说存在,商品两两组合、多个商品组合的情况。

这种情况下,就可以用上述方法,获取到一堆商品里面,可以任意组合成多个有序、不重复的集合,用于捆绑活动的匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值