计算集合/组中所有可能的组合

克里斯

我需要从一组过滤器/参数中为所有可能的组合创建一个URL列表。

输入值

$data = array(
    array(
        'vehicle=car',
        'vehicle=bike',
        'vehicle=plane',
    ),
    array(
        'fruit=apple',
        'fruit=banana',
        'fruit=strawberry'
    ),
    array(
        'music=pop',
        'music=rock',
        'music=jazz'
    )
);

生成的项目必须具有按字母顺序排列的参数。
例如:

INCORRECT: ?vehicle=bike&fruit=apple&music=rock

CORRECT: ?fruit=apple&music=rock&vehicle=bike

输出量

?vehicle=car
?vehicle=bike
?vehicle=plane
?fruit=apple&vehicle=car
?fruit=banana&vehicle=car
?fruit=strawberry&vehicle=car
?fruit=apple&vehicle=bike
?fruit=banana&vehicle=bike
?fruit=strawberry&vehicle=bike
?fruit=apple&vehicle=plane
?fruit=banana&vehicle=plane
?fruit=strawberry&vehicle=plane
?fruit=apple&music=pop&vehicle=car
?fruit=apple&music=rock&vehicle=car
?fruit=apple&music=jazz&vehicle=car
?fruit=banana&music=pop&vehicle=car
?fruit=banana&music=rock&vehicle=car
?fruit=banana&music=jazz&vehicle=car
?fruit=strawberry&music=pop&vehicle=car
?fruit=strawberry&music=rock&vehicle=car
?fruit=strawberry&music=jazz&vehicle=car
?fruit=apple&music=pop&vehicle=bike
?fruit=apple&music=rock&vehicle=bike
?fruit=apple&music=jazz&vehicle=bike
?fruit=banana&music=pop&vehicle=bike
?fruit=banana&music=rock&vehicle=bike
?fruit=banana&music=jazz&vehicle=bike
?fruit=strawberry&music=pop&vehicle=bike
?fruit=strawberry&music=rock&vehicle=bike
?fruit=strawberry&music=jazz&vehicle=bike
?fruit=apple&music=pop&vehicle=plane
?fruit=apple&music=rock&vehicle=plane
?fruit=apple&music=jazz&vehicle=plane
?fruit=banana&music=pop&vehicle=plane
?fruit=banana&music=rock&vehicle=plane
?fruit=banana&music=jazz&vehicle=plane
?fruit=strawberry&music=pop&vehicle=plane
?fruit=strawberry&music=rock&vehicle=plane
?fruit=strawberry&music=jazz&vehicle=plane
?music=pop&vehicle=car
?music=rock&vehicle=car
?music=jazz&vehicle=car
?music=pop&vehicle=bike
?music=rock&vehicle=bike
?music=jazz&vehicle=bike
?music=pop&vehicle=plane
?music=rock&vehicle=plane
?music=jazz&vehicle=plane
?fruit=apple
?fruit=banana
?fruit=strawberry
?fruit=apple&music=pop
?fruit=apple&music=rock
?fruit=apple&music=jazz
?fruit=banana&music=pop
?fruit=banana&music=rock
?fruit=banana&music=jazz
?fruit=strawberry&music=pop
?fruit=strawberry&music=rock
?fruit=strawberry&music=jazz
?music=pop
?music=rock
?music=jazz

有没有人可以帮助我解决这个问题。我已经为它苦苦挣扎了两天,但似乎找不到正确的解决方案。在Stackoverflow上有很多(几乎)类似的问题,但似乎都没有一个能解决/解决我的问题。

[已解决]这是根据杜尚·帕拉瓦克的回答得出的最终工作版本:

function createFilterCombinations($data, &$urls = array(), $index = 0, $query = false){
    $keys = array_keys($data);
    $_query = $query;
    if ($index == count($data)) {
        return;
    }
    for($i=0; $i < count($data[$keys[$index]]); $i++){
        $query = $_query;
        if($index == 0){
            $query = "?" . $data[$keys[$index]][$i];
        }else{
            if($query != "?"){
                $query .= "&" . $data[$keys[$index]][$i];
            }else{
                $query .= $data[$keys[$index]][$i];
            }
        }
        $urls[] = $query;
        createFilterCombinations($data, $urls, $index+1, $query);
    }
    if($index == 0){
        $query = "?";
    } else {
        $query = $_query;
    }
    createFilterCombinations($data, $urls, $index+1, $query);
}

function prepareArray($array){
    $newArray = array();
    foreach ($array as $subArray) {
        sort($subArray);
        $newArray[substr($subArray[0], 0, strpos($subArray[0], '='))] = $subArray;
    }
    ksort($newArray);
    return $newArray;
}

createFilterCombinations(prepareArray($data), $result);

var_dump($result);
杜尚·帕拉瓦克(Dusan Plavak)

因此,请看此http://codepad.org/TZWf7Vxd

和代码链接将被终止的时间:D

<?php
$data = array(
    "vehicle" => array(
        'vehicle=car',
        'vehicle=bike',
        'vehicle=plane',
    ),
    "fruit" => array(
        'fruit=apple',
        'fruit=banana',
        'fruit=strawberry'
    ),
    "music" => array(
        'music=pop',
        'music=rock',
        'music=jazz'
    )
);
function hop($index, $query, $data){
  $keys = array_keys($data);
  if($index == count($data)){
      return;
  }
  $queryBackup = $query;
  for($i=0;$i<count($data[$keys[$index]]);$i++){
      $query = $queryBackup;
      if($index == 0){
          $query = "?".$data[$keys[$index]][$i];
      }else{
          if($query != "?"){
              $query .= "&".$data[$keys[$index]][$i];
          }else{
              $query .= $data[$keys[$index]][$i];
          }
      }
      echo $query."\n";
      hop($index+1, $query, $data);
  }
  if($index == 0){
     $query = "?";
  }else{
     $query = $queryBackup;
  }
  hop($index+1, $query, $data);
}

ksort($data);
hop(0,"", $data);
?>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算集合/组中所有可能的组合

来自分类Dev

集合中所有可能的独特组合

来自分类Dev

集合中所有可能的独特组合

来自分类Dev

计算R中所有组合的乘积

来自分类Dev

计算可能的数字组合组合

来自分类Dev

数组中所有可能的组合-递归?

来自分类Dev

网格中所有可能的组合

来自分类Dev

python中所有可能的组合

来自分类Dev

数组中所有可能的组合-递归?

来自分类Dev

网格中所有可能的组合

来自分类Dev

查找集合中所有可能的和

来自分类Dev

获取Matlab中所有可能的位翻转组合以进行CRC计算

来自分类常见问题

如何从包含所有集合组合的项目集合中创建Pandas DataFrame?

来自分类Dev

如何从包含所有集合组合的项目集合中创建Pandas DataFrame?

来自分类Dev

Julia中所有可能长度的所有组合

来自分类Dev

集合组合中的所有字符可创建字符串

来自分类Dev

集合组合中的所有字符可创建字符串

来自分类Dev

如何计算R中所有成对组合的均值

来自分类Dev

Python计算表的所有可能组合

来自分类Dev

Java搜索数组中所有可能的组合列表(算法)

来自分类Dev

查找Python中所有可能的参数组合

来自分类Dev

获取矩阵中所有可能的行组合

来自分类Dev

SQL查询:总和,表中所有可能的行组合

来自分类Dev

JavaScript中所有可能的组合-为什么选择pop()?

来自分类Dev

数组中所有可能的总和以及组合的投影

来自分类Dev

获取矩阵中所有可能的行组合

来自分类Dev

数组中所有可能组合的乘积总和

来自分类Dev

计算网络中所有可能配对的连接总数

来自分类Dev

vb.net对组合以创建所有可能的集合