给定一个具有多个代表不同属性的子数组的关联数组,任务是计算笛卡尔积,同时保留密钥及其对应的
对于有 N 个子数组的数组 $input,其中每个子数组有 Cn 个元素,我们可以继续归纳:
假设我们有前 N-1 个子数组的笛卡尔积,我们可以通过以下方式计算第 N 个子数组的乘积:
function cartesian($input) { $result = []; while (list($key, $values) = each($input)) { if (empty($values)) { continue; } if (empty($result)) { foreach ($values as $value) { $result[] = [$key => $value]; } } else { $append = []; foreach ($result as &$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 = [ 'arm' => ['A', 'B', 'C'], 'gender' => ['Female', 'Male'], 'location' => ['Vancouver', 'Calgary'], ]; print_r(cartesian($input));
将输出所需的笛卡尔积,保留键和值:
Array ( [0] => Array ( [arm] => A [gender] => Female [location] => Vancouver ) [1] => Array ( [arm] => A [gender] => Female [location] => Calgary ) [2] => Array ( [arm] => A [gender] => Male [location] => Vancouver ) ...etc.
以上是如何在保留键值对的同时计算 PHP 关联数组的笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!