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

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

Barbara Streisand
Barbara Streisand原创
2024-12-26 13:58:13625浏览

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>
<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>
<pre class="brush:php;toolbar:false">'arm' => array('A', 'B', 'C'),
'gender' => array('Female', 'Male'),
'location' => array('Vancouver', 'Calgary'),

);

print_r(笛卡尔($input));

数组<br>(<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn