php从给定数组生成所有组合
Posted
技术标签:
【中文标题】php从给定数组生成所有组合【英文标题】:php generate all combinations from given array 【发布时间】: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));
【问题讨论】:
您自己尝试过什么吗?此外,我们能否看到更多扩展示例以更好地理解该模式? 我会假设,没有插件解决方案,你只需要自己做。 How to generate in PHP all combinations of items in multiple arrays 的可能重复项 请参阅更新后的问题并提供更多示例。是的,我自己尝试使用嵌套的foreach
循环来完成,但什么也没发生。
【参考方案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
【讨论】:
以上是关于php从给定数组生成所有组合的主要内容,如果未能解决你的问题,请参考以下文章