在PHP中将两个不同长度的数组相乘?

问题描述 投票:0回答:1

我有一个动态数组:

$variants = [
    'color' => ['Blue', 'Red', 'Pink'],
    'size' => ['X', 'S'],
    ... (maybe more elements like above or not)
];

我希望这样:

$result = [
    0 => ['color' => 'Blue', 'size' => 'X'],
    1 => ['color' => 'Blue', 'size' => 'S'],
    2 => ['color' => 'Red', 'size' => 'X'],
    3 => ['color' => 'Red', 'size' => 'S'],
    4 => ['color' => 'Pink', 'size' => 'X'],
    5 => ['color' => 'Pink', 'size' => 'S']
];

结果是所有数组长度的乘积。我已经搜索过,但尚未找到解决方案。希望任何人都能提供帮助。非常感谢!

php arrays multiplying
1个回答
0
投票

这有点棘手,您需要为此做准备和汇总步骤。但是有可能不退回递归:

<?php
$variants = [
    'color' => ['Blue', 'Red', 'Pink'],
    'size' => ['X', 'S'],
    'weight' => [150, 250]
];

$result = [];
foreach ($variants as $key => $set) {
    foreach ($set as $entry) {
        $result[] = [$key => $entry];
    }
    break;
}
array_shift($variants);

foreach($variants as $setKey => $set) {
    $buffer = $result;
    $result = [];

    foreach ($set as $entry) {

        foreach ($buffer as $buf) {
            $result[] = array_merge($buf, [$setKey => $entry]);
        }
    }
}

var_dump($result);

其输出是:

array(12) {
  [0]=>
  array(3) {
    ["color"]=>
    string(4) "Blue"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(150)
  }
  [1]=>
  array(3) {
    ["color"]=>
    string(3) "Red"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(150)
  }
  [2]=>
  array(3) {
    ["color"]=>
    string(4) "Pink"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(150)
  }
  [3]=>
  array(3) {
    ["color"]=>
    string(4) "Blue"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(150)
  }
  [4]=>
  array(3) {
    ["color"]=>
    string(3) "Red"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(150)
  }
  [5]=>
  array(3) {
    ["color"]=>
    string(4) "Pink"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(150)
  }
  [6]=>
  array(3) {
    ["color"]=>
    string(4) "Blue"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(250)
  }
  [7]=>
  array(3) {
    ["color"]=>
    string(3) "Red"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(250)
  }
  [8]=>
  array(3) {
    ["color"]=>
    string(4) "Pink"
    ["size"]=>
    string(1) "X"
    ["weight"]=>
    int(250)
  }
  [9]=>
  array(3) {
    ["color"]=>
    string(4) "Blue"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(250)
  }
  [10]=>
  array(3) {
    ["color"]=>
    string(3) "Red"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(250)
  }
  [11]=>
  array(3) {
    ["color"]=>
    string(4) "Pink"
    ["size"]=>
    string(1) "S"
    ["weight"]=>
    int(250)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.