美文网首页算法设计
多维数组的排列组合(商品多规格)算法[PHP]

多维数组的排列组合(商品多规格)算法[PHP]

作者: 芜芯菜 | 来源:发表于2019-08-02 10:53 被阅读0次
<?php
/**
 * 返回给的数组的所有组合
 * @email kavtong@163.com
 * @param array $orignal 多维数组
 *      $orignal = array(
 *              array(1,2,3),
 *              array(4,5,6),
 *              array(7,8,9),
 *      );
 * @return array(
 *              array(1,4,7),
 *              array(1,4,8),
 *              array(1,4,9),
 *              ...
 *              array(3,6,7),
 *              array(3,6,8),
 *              array(3,6,9),
 *          );
 *  数组元素共: 3*3*3 = 27个
 */
function getPermutation(array $orignal = array()){
    // 排除非数组的参数
    if(!is_array($orignal)){
        return [];
    }
    
    // 排除空数组
    if(empty($orignal)){
        return [];
    }

    // 排除只有一个元素的数组
    if(count($orignal) < 2){
        // 返回的目标数组
        $targetTmp = array_shift($orignal);
        // 返回结果集
        return is_array($targetTmp)?$targetTmp:[];
    }
    // 构建目标数组
    $target = array_shift($orignal);
    // 目标数组第一个元素格式化为数组
    $target = is_array($target)?$target:[];
    // 下一个需要处理的数组
    $tmp = array_shift($orignal);
    // 非正常数据标识
    $invalideParam = false;
    // 数组且不为空
    while(is_array($tmp) && !empty($tmp)){
        // 验证参数是否是一维数组
        if(count($tmp) <> count($tmp,COUNT_RECURSIVE)){
            $invalideParam = true;
            break;
        }
        /**
         * 原始数组的循环
         * array(
         *      0 =>1,
         *      1 =>2,
         *      2 =>3,
         * );
         */
        // 目标数组的临时变量
        $targetTmp = array();
        foreach($target as $value){
            foreach($tmp as $v){
                // 临时数组变量
                $targetTmp[] = array_merge((array)$value,[$v]);
            }
        }
        // 原始数组的替换
        $target = $targetTmp;
        // 移动数组的下一个元素
        $tmp = array_shift($orignal);
    }
    // 存在非一维数组项
    if($invalideParam){
        return [];
    }
    // 返回结果集
    return is_array($target)?$target:[];
}

相关文章

  • 多维数组的排列组合(商品多规格)算法[PHP]

  • 算法实际应用集(上)

    使用笛卡尔算法进行sku组合 需求 对商品规格进行排列组合,电商的sku商品组合 功能截图,对商品规格进行组合排列...

  • iOS多维数组组合

    适用于商品选择 统计商品规格计价 移动端上架商品使用 多维数组排列 运行示例:(因为数据量过大 截取部分长度打印 ...

  • php多维混合数组转一维数组的函数

    php多维混合数组转一维数组的函数 php语言本身没有将多维数组转为一维数组的函数,但是我们可以自己写一个php函...

  • 关于若干数组组合的问题 PHP

    主要是用于商品多规格时候 规格的组合,比如选择规格颜色:蓝色,红色,风格:卡通,动漫,在php 处理中要组合蓝色卡...

  • PHP Day4:基础回顾与加强

    多维数组 多维数组指的是包含一个或多个数组的数组。 PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过...

  • PHP常用数组排序算法

    title: PHP常用数组排序算法tags: [PHP,数组,排序,算法] 这几天写到的代码中,用到了许多对数组...

  • 商品多规格

    商品表 id商品名称是否多规格商品价格库存重量1xx手机0100010001kg2xx手机21-110001kg ...

  • PHP 数组,多维数组

    PHP 数组:数组能够在单独的变量名中存储一个或多个值。 什么是数组?数组是特殊的变量,它可以同时保存一个以上的值...

  • 2019-07-20

    PHP Array 函数允许您访问并操作数组。 支持简单的数组和多维数组。

网友评论

    本文标题:多维数组的排列组合(商品多规格)算法[PHP]

    本文链接:https://www.haomeiwen.com/subject/kmwkdctx.html