【问题标题】:PHP: generate all possible combinations of an array with some items required and some optionalPHP:生成数组的所有可能组合,其中一些项是必需的,一些是可选的
【发布时间】:2012-03-08 20:21:02
【问题描述】:

我有 2 个数组。 1 表示应始终使用的项目,1 表示可选项目。 我想要的是与这些项目的所有可能组合的列表。 数组中的项目必须成为具有真或假值的属性。

例如数组

$requiredAttr = array('header', 'footer');
$optAttr = array('image');

应该给出以下结果:

header="false" footer="false"
header="false" footer="false" image="false"
header="false" footer="false" image="true"
header="true" footer="false"
header="true" footer="false" image="false"
header="true" footer="false" image="true"
header="false" footer="true"
header="false" footer="true" image="false"
header="false" footer="true" image="true"
header="true" footer="true"
header="true" footer="true" image="false"
header="true" footer="true" image="true"

当然,这适用于两个数组中的任意数量的项目。

【问题讨论】:

  • 感谢您提出的问题...

标签: php attributes combinations


【解决方案1】:

检查这个.. 根据您的标准更改变量名称.. 我打印所有数组进行调试。

http://codepad.org/HK1plx9n

更优化的代码

http://codepad.org/pwVOWeRJ

<?php

$requiredAttr = array('header', 'footer');
$boolarr = array('true', 'false');
$optAttr = array('image' );

$larr  = combine_array($requiredAttr , $boolarr , '=');

$a_arr = array_slice($larr , 0 , count($larr)/2);
$b_arr = array_slice($larr , count($larr)/2 , count($larr)/2);


$larr_1    = combine_array($a_arr , $b_arr , ' ');
$larr     = combine_array($optAttr , $boolarr , '=');
array_push($larr , ''); // for optional

$larr_3  = combine_array($larr_1 , $larr , ' ');

function combine_array($first_arr , $second_arr , $separator)
{
    $combine_arr  = array();
    for($i=0;$i<count($first_arr) ; $i++)
    {
    for($j=0;$j<count($second_arr) ; $j++)
    {
        array_push($combine_arr , $first_arr[$i].$separator.$second_arr[$j]);
    } 
    }
    return $combine_arr;
}



print_r($larr_3);



?>

【讨论】:

    【解决方案2】:

    您可能可以使用简单地返回其所有值的二叉树来实现这一点。类似的东西(仅理论上,可能行不通):

    function a($bool_arr, $required, $optional)
    {
        if (count($bool_arr) < (count($required) + count($optional))
        {
            return array_merge(a(array_merge($bool_arr), array(true), $required, $optional), a(array_merge($bool_arr), array(false), $required, $optional));
        }
    }
    

    【讨论】:

      【解决方案3】:

      将所有必需属性与可选属性分开并用于每个集合this gist。 构建每个集合的组合时,您只需将每个组合从所需组合集合复制到此数组,并将每个可选组合可选集合附加到每个所需组合集合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-30
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-08-16
        • 2019-04-06
        • 2016-01-07
        相关资源
        最近更新 更多