【问题标题】:Dynamically create new Arrays, fill each with specials values from first array and than get combinations of them动态创建新数组,用第一个数组中的特殊值填充每个数组,然后获取它们的组合
【发布时间】:2014-06-30 21:33:19
【问题描述】:

这个问题和我的old one here有点相似。

但是现在我只有一个动态填充的数组

Array ( 
    [8] => 3-Blue
    [9] => 3-Red
    [10] => 4-L
    [11] => 4-XL
    ...
    ...
)

对于值前面的每个数字,我需要一个新数组。所以对于这个例子,我需要这两个

Array ( 
    [8] => Blue
    [9] => Red
)

Array (
    [10] => L
    [11] => XL
)

密钥应该保持不变。如果这是不可能的,那么键应该在值L - 10

我需要组合这些数组,并在这样的新数组中获得没有重复的可能组合。

Array (
    [0] => Blue | L - 8,10
    [1] => Blue | XL - 8,11
    [2] => Red | L - 9,10
    [3] => Red | XL - 9,11
)

在每个值之后,必须有前面的数组的键。

这有可能吗?!如果是,如何?

【问题讨论】:

  • 是的,这是可能的。你试过什么?
  • 我尝试使用几种 foreach 循环,但我不知道如何实现这一点。 @user574632 Booth 会很棒:D 但我认为有一个清晰的代码,对我来说理解它是如何工作的会更好。
  • 所有这些字符串是从哪里来的?他们怎么会变成这样?
  • 它们是第一个数组的键,是选项对象的id,值字符串中的数字是包含多个选项的变体对象的id。值的第二部分是选项的标题。我不知道如何解决我的问题的另一种方法。
  • 查看这个关于查找关联数组的笛卡尔积的问题:stackoverflow.com/questions/6311779/…

标签: php arrays


【解决方案1】:

您可以使用嵌套的foreach ($arr as $key => $val) 循环简单地迭代两个数组。
这里我使用sprintf 函数而不是字符串连接,只是因为它使预期的输出格式更加清晰。

$color_array = array(8 => "Blue", 9 => "Red");
$size_array  = array(10 => "L", 11 => "XL");

$result = array();

// For each key => value pair in the color array
foreach ($color_array as $color_key => $color) {

    // For each key => value pair in the size array
    foreach ($size_array as $size_key => $size) {

        // Generate the result string with "sprintf", then append it to the result array
        $result[] = sprintf("%s | %s - %d,%d", $color, $size, $color_key, $size_key);
    }
}

var_dump($result);
// array(4) {
//   [0]=> string(15) "Blue | L - 8,10"
//   [1]=> string(16) "Blue | XL - 8,11"
//   [2]=> string(14) "Red | L - 9,10"
//   [3]=> string(15) "Red | XL - 9,11"
// }

您可以使用array_unique 对结果数组进行重复数据删除。但是,如果您的两个输入数组都是唯一的,那么您的输出集也应该是唯一的。

【讨论】:

  • 谢谢,但这两个数组在哪里仅作为示例。可能有 0、3 或 4 个,甚至更多。
  • 你的意思是两个以上的阵列被连接在一起?您可能应该在问题中指定这一点。
  • 对不起,我以为我是用这句话做的,'所以对于这个例子,我需要这两个'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 2023-03-03
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多