【问题标题】:php generate all combinations from given arrayphp从给定数组生成所有组合
【发布时间】:2013-07-30 07:43:50
【问题描述】:

转换此PHP 数组的最简单方法是什么

$a = array('A' => array(1, 2),
           'B' => array(3, 4),
           'C' => array(5));

进入这个:

$result = array(
    array('A' => 1, 'B' => 3, 'C' => 5),
    array('A' => 1, 'B' => 4, 'C' => 5),
    array('A' => 2, 'B' => 3, 'C' => 5),
    array('A' => 2, 'B' => 4, 'C' => 5),
);

$a 可能有很多不同的keys 在开发期间我不知道。所以我需要 生成给定数组中的所有组合。

更新:

我必须根据传入数组生成URLs。所以我不知道在开发期间我会得到多少参数。我只有参数数组,可以是例如

$a = array('A' => array(5,3, 1));

结果将是:

$result = array(
    array('A' => 5),
    array('A' => 3),
    array('A' => 1));

$a = array('X' => array(5), 'D' => array(4, 7));

结果将是:

$result = array(
    array('X' => 5, 'D' => 4),
    array('X' => 5, 'D' => 7));

【问题讨论】:

  • 您自己尝试过什么吗?此外,我们能否看到更多扩展示例以更好地理解该模式?
  • 我会假设,没有插件解决方案,你只需要自己做。
  • 请参阅更新后的问题并提供更多示例。是的,我自己尝试使用嵌套的 foreach 循环来完成,但什么也没发生。

标签: php combinations


【解决方案1】:

喜欢这个:

$a = array('A' => array(1, 2),
           'B' => array(3, 4),
           'C' => array(5));

function get_combinations($arrays) {
    $result = array(array());
    foreach ($arrays as $property => $property_values) {
        $tmp = array();
        foreach ($result as $result_item) {
            foreach ($property_values as $property_value) {
                $tmp[] = array_merge($result_item, array($property => $property_value));
            }
        }
        $result = $tmp;
    }
    return $result;
}

输出

var_dump(get_combinations($a));

array (size=4)
  0 => 
    array (size=3)
      'A' => int 1
      'B' => int 3
      'C' => int 5
  1 => 
    array (size=3)
      'A' => int 1
      'B' => int 4
      'C' => int 5
  2 => 
    array (size=3)
      'A' => int 2
      'B' => int 3
      'C' => int 5
  3 => 
    array (size=3)
      'A' => int 2
      'B' => int 4
      'C' => int 5

【讨论】:

    【解决方案2】:

    您可以将此功能用于此请求:

    function pc_array_power_set($array) {
        // initialize by adding the empty set
        $results = array(array( ));
    
        foreach ($array as $element)
            foreach ($results as $combination)
                array_push($results, array_merge(array($element), $combination));
    
        return $results;
    }
    

    用法:

    $set = array('A', 'B', 'C');
    $power_set = pc_array_power_set($set);
    

    输出:

    array( );
    array('A');
    array('B');
    array('C');
    array('A', 'B');
    array('A', 'C');
    array('B', 'C');
    array('A', 'B', 'C');
    

    资源:http://docstore.mik.ua/orelly/webprog/pcook/ch04_25.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多