• 用PHP组合数组,生成笛卡尔积的几个例子


    1 下面的代码来生成笛卡尔积:

    function cartesianProduct($arrays) {
        $result = [[]];
        foreach ($arrays as $property => $property_values) {
            $tmp = [];
            foreach ($result as $result_item) {
                foreach ($property_values as $property_value) {
                    $tmp[] = array_merge($result_item, [$property => $property_value]);
                }
            }
            $result = $tmp;
        }
        return $result;
    }
    
    $colors = ["红色", "白色", "黄色", "蓝色"];
    $sizes = ["128G", "256G", "512G"];
    $versions = ["国行", "港版", "美版", "韩版"];
    
    // 生成笛卡尔积
    $combinations = cartesianProduct([
        '颜色' => $colors,
        '尺寸' => $sizes,
        '版本' => $versions
    ]);
    
    // 输出笛卡尔积结果
    foreach ($combinations as $combination) {
        echo implode(', ', $combination) . "\n";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    这段代码会生成由输入数组的笛卡尔积组成的数组。你可以根据需要修改输入数组,并按照相同的格式来调用cartesianProduct函数。

    2 下面是使用嵌套循环生成笛卡尔积的PHP代码示例:

    // 定义多个数组
    $colors = ['红色', '白色', '黄色', '蓝色'];
    $capacities = ['128G', '256G', '512G'];
    $versions = ['国行', '港版', '美版', '韩版'];
    
    // 初始化笛卡尔积数组
    $cartesianProduct = [];
    
    // 使用嵌套循环生成笛卡尔积
    foreach ($colors as $color) {
        foreach ($capacities as $capacity) {
            foreach ($versions as $version) {
                $cartesianProduct[] = [$color, $capacity, $version];
            }
        }
    }
    
    // 打印笛卡尔积
    foreach ($cartesianProduct as $combination) {
        echo implode(', ', $combination) . "\n";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这将生成颜色、容量和版本的所有可能组合。你可以根据需要修改数组的值和数量来生成不同的笛卡尔积。此外,你还可以使用递归来处理不定数量的数组生成笛卡尔积。

    3以下是一个示例,生成给定数组的笛卡尔积:

    function cartesianProduct($arrays) {
        $result = array();
        $max = count($arrays) - 1;
        $result = array();
        function helper($arr, $i) {
            global $result, $max;
            if ($i == $max) {
                foreach ($arr[$i] as $value) {
                    $result[] = $value;
                }
            } else {
                foreach ($arr[$i] as $value) {
                    helper($arr, $i + 1);
                    foreach ($result as &$product) {
                        $product = "$product, $value";
                    }
                }
            }
        }
        helper($arrays, 0);
        return $result;
    }
    
    // 示例用法
    $colors = ["红色", "白色", "黄色", "蓝色"];
    $storage = ["128G", "256G", "512G"];
    $versions = ["国行", "港版", "美版", "韩版"];
    
    $arrays = [$colors, $storage, $versions];
    $cartesianProduct = cartesianProduct($arrays);
    
    foreach ($cartesianProduct as $combination) {
        echo "组合: $combination\n";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    这个示例将生成给定数组的笛卡尔积,以获取所有可能的组合。你可以根据你的需求替换 $colors$storage$versions 数组来生成不同的组合。

    4 使用嵌套的循环来生成这些数组的笛卡尔积。以下是一些示例代码:

    // 示例1:生成颜色和尺寸的笛卡尔积
    $colors = ["红色", "白色", "黄色", "蓝色"];
    $sizes = ["128G", "256G", "512G"];
    
    $combinations = [];
    foreach ($colors as $color) {
        foreach ($sizes as $size) {
            $combinations[] = [$color, $size];
        }
    }
    
    print_r($combinations);
    
    // 示例2:生成颜色、尺寸和版本的笛卡尔积
    $colors = ["红色", "白色", "黄色", "蓝色"];
    $sizes = ["128G", "256G", "512G"];
    $versions = ["国行", "港版", "美版", "韩版"];
    
    $combinations = [];
    foreach ($colors as $color) {
        foreach ($sizes as $size) {
            foreach ($versions as $version) {
                $combinations[] = [$color, $size, $version];
            }
        }
    }
    
    print_r($combinations);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    这些示例会生成颜色、尺寸和版本的笛卡尔积,你可以根据需要自定义数组和维度来生成不同组合。

  • 相关阅读:
    用1100天做一款通用的管理后台框架
    SwipeRefreshLayout和TextView滑动冲突的暴力解决方法
    UE5 GAS 学习笔记 后记0
    Vue3的customRef()
    济南数字孪生赋能工业制造,加速推进制造业数字化转型
    记一次dubbo整合nacos no Provider排查
    鼠标点击选取物体错误的问题
    在众多编程语言中,我为什么要学Python?
    【前端面试题】【JavaScript】数组有哪几种循环方式?分别有什么作用?
    Unity可视化Shader工具ASE介绍——7、ASE实现Matcap效果和自定义节点
  • 原文地址:https://blog.csdn.net/phpCenter/article/details/133942182