Php 基于产品变体数组创建规则数组

Php 基于产品变体数组创建规则数组,php,arrays,Php,Arrays,我有这个产品变体阵列: array:3 [ 0 => array:2 [ 0 => "2_12" 1 => "4_9" ] 1 => array:2 [ 0 => "2_3" 1 => "4_9" ] 2 => array:2 [ 0 => "2_4" 1 => "4_10" ] ] $rules = array(); foreach ($variati

我有这个产品变体阵列:

array:3 [
  0 => array:2 [
    0 => "2_12"
    1 => "4_9"
  ]
  1 => array:2 [
    0 => "2_3"
    1 => "4_9"
  ]
  2 => array:2 [
    0 => "2_4"
    1 => "4_10"
  ]
]
    $rules = array();
    foreach ($variations as $variation) {
        foreach ($variation as $index => $v) {
            $nextIndex = ++$index;
            if(!isset($rules[$v])){
                $rules[$v] = array();
                if(isset($variation[$nextIndex])){
                   array_push($rules[$v],$variation[$nextIndex]);
                }
            } else {
                if(isset($variation[$nextIndex])){
                    array_push($rules[$v],$variation[$nextIndex]);
                }
            }
        }

        $variation = array_reverse($variation);
        foreach ($variation as $index => $v) {
            $nextIndex = ++$index;
            if(isset($variation[$nextIndex])){
                array_push($rules[$v],$variation[$nextIndex]);
            }
        }
    }
需要从中创建一些规则

每个数组包含一个产品变量,每个元素由选项_值组成

例如:第一个数组:[2_12,4_9]=>[颜色为紫色,材质为棉花]

我想创建另一个数组,其中包含基于该数组的每个元素组合

例:我想看看紫色和什么材料相结合,棉花和什么颜色相结合……等等

像这样:

array:5 [
  "2_12" => array:1 [
    0 => "4_9"    
  ]
  "2_3" => array:1 [   
    0 => "4_9"
  ]
  "2_4" => array:1 [    
    0 => "4_10"
  ]
  "4_9" => array:2 [    
    0 => "2_12"
    1 => "2_3"
  ]
  "4_10" => array:1 [    
    0 => "2_4"
  ]
]

如何根据product variations阵列装箱最后一个阵列?

我创建了阵列。。。。。可能不是最好的解决方案…但很有效

如果你有更好的方法。。。。只需发布:

基于变体数组:

array:3 [
  0 => array:2 [
    0 => "2_12"
    1 => "4_9"
  ]
  1 => array:2 [
    0 => "2_3"
    1 => "4_9"
  ]
  2 => array:2 [
    0 => "2_4"
    1 => "4_10"
  ]
]
    $rules = array();
    foreach ($variations as $variation) {
        foreach ($variation as $index => $v) {
            $nextIndex = ++$index;
            if(!isset($rules[$v])){
                $rules[$v] = array();
                if(isset($variation[$nextIndex])){
                   array_push($rules[$v],$variation[$nextIndex]);
                }
            } else {
                if(isset($variation[$nextIndex])){
                    array_push($rules[$v],$variation[$nextIndex]);
                }
            }
        }

        $variation = array_reverse($variation);
        foreach ($variation as $index => $v) {
            $nextIndex = ++$index;
            if(isset($variation[$nextIndex])){
                array_push($rules[$v],$variation[$nextIndex]);
            }
        }
    }
规则数组如下所示:

array:5 [
  "2_12" => array:1 [
    0 => "4_9"
  ]
  "4_9" => array:2 [
    0 => "2_12"
    1 => "2_3"
  ]
  "2_3" => array:1 [
    0 => "4_9"
  ]
  "2_4" => array:1 [
    0 => "4_10"
  ]
  "4_10" => array:1 [
    0 => "2_4"
  ]
]

我想我会第一次尝试在原始循环上编写foreach循环array@RiggsFolly我发布了一个可能的答案。。。就像我说的,这不是最好的。你有更好的解决办法吗?