首页 > 后端开发 > php教程 > 如何在保留键的同时计算 PHP 关联数组的笛卡尔积?

如何在保留键的同时计算 PHP 关联数组的笛卡尔积?

Barbara Streisand
发布: 2024-12-26 13:58:13
原创
618 人浏览过

How to Calculate the Cartesian Product of PHP Associative Arrays while Preserving Keys?

使用 PHP 关联数组查找笛卡尔积


给定一个关联数组,可以在保留其键的同时确定其笛卡尔积并在内部利用它们

方法论


我们可以通过归纳法来解决这个问题:



  1. 对于单个数组,笛卡尔积是一系列具有表示原始数组中每个项目的单个键值对的数组。



  2. 假设前 N-1 个数组的乘积已知,添加第N个数组涉及:



  3. 对于每个现有产品,附加一个包含第 N 个数组的键和第 N 个数组的第一个值的元素




重复这些步骤可确保获得 N 个数组的乘积。


实现


功能cartesian($input) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$result = array();

foreach ($input as $key => $values) {
    if (empty($values)) {
        continue;
    }

    if (empty($result)) {
        foreach($values as $value) {
            $result[] = array($key => $value);
        }
    } else {
        $append = array();

        foreach($result as &amp;$product) {
            $product[$key] = array_shift($values);
            $copy = $product;

            foreach($values as $item) {
                $copy[$key] = $item;
                $append[] = $copy;
            }

            array_unshift($values, $product[$key]);
        }

        $result = array_merge($result, $append);
    }
}

return $result;
登录后复制

}

用法示例


$input = array(</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'arm' => array('A', 'B', 'C'),
'gender' => array('Female', 'Male'),
'location' => array('Vancouver', 'Calgary'),
登录后复制

);

print_r(笛卡尔($input));

数组<br>(<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">[0] => Array
    (
        [arm] => A
        [gender] => Female
        [location] => Vancouver
    )

[1] => Array
    (
        [arm] => A
        [gender] => Female
        [location] => Calgary
    )

[2] => Array
    (
        [arm] => A
        [gender] => Male
        [location] => Vancouver
    )
登录后复制

...等

以上是如何在保留键的同时计算 PHP 关联数组的笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
上一篇:日设置 Laravel 下一篇:在 PHP 输入验证中同时使用 `isset()` 和 `!empty()` 是多余的吗?
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
来自于 2024-04-16 10:10:18
0
0
2004
相关专题
更多>
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板