【问题标题】:PHP Array get all possible variations from multiply arraysPHP Array 从乘法数组中获取所有可能的变化
【发布时间】:2015-04-14 08:19:39
【问题描述】:

这里已经有一些这样的帖子,但没有一个对我有帮助, 我有一个看起来像这样的示例数组

$array = array(
array(
    'label' => 'test 1-1',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '2',
    'required' => '1'
),
array(
    'label' => 'test 1-2',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '12',
    'required' => '1'
),
array(
    'label' => 'test 1-3',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '132',
    'required' => '1'
),
array(
    'label' => 'test 2-1',
    'pricing_value' => '10',
    'attr_id' => '2',
    'selectionId' => '11',
    'required' => '0'
),
array(
    'label' => 'test 2-2',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '14',
    'required' => '0'
),
array(
    'label' => 'test 2-3',
    'pricing_value' => '10',
    'attr_id' => '2',
    'selectionId' => '12',
    'required' => '0'
),

);

输出应该是这样的

array (
array (
'label' => "test 1-1 + test 2-1",
'price-value' => '20',
'required' => '1'
)
)

等等…… 但没有任何重复,如 test 2-1 + test 1-1 将是重复的 数组被分组为“attr_id”,可以有 100 个类似 Sesction_id 是这个元素 id,它们在一个 attr_id 中不会是相同的部分 id,但如果 attr_id 不同,它们可以相同。希望有意义。

如果需要设置为 0,那么它们应该是 2options 有这个和没有它

比如“required1 + required2 + not required3”和“required1 + required2”

我在排序数组方面真的很糟糕,有人可以帮我解决这个问题吗?

编辑:

所有这些选项都来自合并为一个的两个数组 每个数组 id 都在 attr_id 中,因此在一个变体中不能有相同的对象,比如不能有 test 1-1 + test 1-2

代码需要输出所有可能的变化 在这个例子中,它会像

test 1-1 + test 2-1 |
test 1-1 + test 2-2 |
test 1-1 + test 2-3 |

test 1-2 + test 2-1 |
test 1-2 + test 2-2 |
test 1-2 + test 2-3 |

test 1-3 + test 2-1 |
test 1-3 + test 2-2 |
test 1-3 + test 2-3 |

$array = array(
array(
    'label' => 'test 1-1 + test 2-1',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-1 + test 2-2',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-1 + test 2-3',
    'pricing_value' => '20'
),

array(
    'label' => 'test 1-2 + test 2-1',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-2 + test 2-2',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-2 + test 2-3',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-3 + test 2-1',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-3 + test 2-2',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-3 + test 2-3',
    'pricing_value' => '20'
),
array(
    'label' => 'test 1-1',
    'pricing_value' => '10'
),
array(
    'label' => 'test 1-2',
    'pricing_value' => '10'
),
array(
    'label' => 'test 1-3',
    'pricing_value' => '10'
),

);

而且还需要 test-1 所有元素,因为不需要 test-2

test 1-1 |
test 1-2 |
test 1-3 |

希望对你有帮助

【问题讨论】:

  • 你想通过 attr_id 过滤这个数组吗?是吗??
  • 在这个例子中有两个可更改的选项,它们的 id 在 attr_id 中

标签: php arrays sorting


【解决方案1】:

试试这个,如果这是你想要的,请告诉我:

        <?php 
$array = array(
array(
    'label' => 'test 1-1',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '2',
    'required' => '1'
),
array(
    'label' => 'test 1-2',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '12',
    'required' => '1'
),
array(
    'label' => 'test 1-3',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '132',
    'required' => '1'
),
array(
    'label' => 'test 2-1',
    'pricing_value' => '10',
    'attr_id' => '2',
    'selectionId' => '11',
    'required' => '0'
),
array(
    'label' => 'test 2-2',
    'pricing_value' => '10',
    'attr_id' => '1',
    'selectionId' => '14',
    'required' => '0'
),
array(
    'label' => 'test 2-3',
    'pricing_value' => '10',
    'attr_id' => '2',
    'selectionId' => '12',
    'required' => '0'
)
);

$filteredArray=array();
$count=0;
foreach($array as $key=>$value){
        $filteredArray[$value['required']][$count]['label']=$value['label'];
        $filteredArray[$value['required']][$count]['pricing_value']=$value['pricing_value'];
        $count++;
}

$finalArray=array();
foreach($filteredArray[1] as $key=>$value){
    if(!isset($finalArray[$value['label']])){
        $finalArray[$value['label']]=$value['pricing_value'];
    }
    foreach($filteredArray[0] as $key=>$value1){
        if(!isset($finalArray[$value['label']."+".$value1['label']])){
            $finalArray[$value['label']."+".$value1['label']]=$value['pricing_value']+$value1['pricing_value'];
        }
    }
}
print_r($finalArray);die;
?>

输出:

   Array
(
    [test 1-1] => 10
    [test 1-1+test 2-1] => 20
    [test 1-1+test 2-2] => 20
    [test 1-1+test 2-3] => 20
    [test 1-2] => 10
    [test 1-2+test 2-1] => 20
    [test 1-2+test 2-2] => 20
    [test 1-2+test 2-3] => 20
    [test 1-3] => 10
    [test 1-3+test 2-1] => 20
    [test 1-3+test 2-2] => 20
    [test 1-3+test 2-3] => 20
)

【讨论】:

  • 谢谢,但是不,输出应该是所有可能的变体,但只有两个元素,因为它们只有两个不同的属性 id,所以它们不能是两个元素具有相同 attr_id 的变体。在这种情况下,它们应该类似于 test 1-1 + test 2-1 |测试 1-1 + 测试 2-2 |测试 1-1 + 测试 2-3 |测试 1-2 + 测试 2-1 |测试 1-2 + 测试 2-2 |测试 1-2 + 测试 2-3 |测试 1-3 + 测试 2-1 |测试 1-3 + 测试 2-2 |测试 1-3 + 测试 2-3 |测试1-1 |测试 1-2 |测试 1-3 |
  • 其实你的要求不是很清楚..这就是为什么我不能帮助你。让您的要求更易于理解。
  • 你能告诉我使用上述数组的确切输出吗?
  • 感谢@Maverick,我们快到了,但是如果我们再添加一个选项数组,例如 array( 'label' => 'test 3-1', 'pricing_value' => '10', ' attr_id' => '3', 'selectionId' => '132', 'required' => '1' ), attr_id 3 它还需要添加 test 1-3+test 2-3 + test 3-1 。 ...如果不需要,那么所有可能的变化都没有它,如果它们的属性超过 3 个,则可能会有 100 个这样的变化
  • 这是你想要的吗?
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2021-12-26
  • 2015-05-01
相关资源
最近更新 更多