我会尝试解释: -
我有三套'。'每组包含6个对象。我需要一个循环(或一系列嵌套循环)来得到这些集合的每个组合。
这是一个游戏,我正在尝试编写一个脚本来比较装甲套装 - 我很难过。集合数组如下所示: -
class => array(
set1 => array(
hat item => array(stats)
glove item => array(stats)
...
set2 => array(
hat item => array(stats)
...
set3 => array(
...
)
这可能比我想象的要简单得多(或者更难?)。
欢迎提示!
谢谢, RUU。
编辑: -
好的,这是一个数组样本,我已经删除了很多额外的统计数据,并为每一部分留下了一个: -
$setinfo = array(
'rk' => array(
'set1' => array(
'hat' => array(
'will' => 114,
),
'shoulders' => array(
'will' => 78,
),
'shirt' => array(
'will' => 78,
),
'gloves' => array(
'will' => 78,
),
'trousers' => array(
'will' => 78,
),
'boots' => array(
'will' => 114,
),
),
'set2' => array(
'hat' => array(
'will' => 78,
),
'shoulders' => array(
'will' => 78,
),
'shirt' => array(
'will' => 114,
),
'gloves' => array(
'will' => 78,
),
'trousers' => array(
'will' => 114,
),
'boots' => array(
'will' => 78,
),
),
'set3' => array(
'hat' => array(
'will' => 78,
),
'shoulders' => array(
'will' => 114,
),
'shirt' => array(
'will' => 78,
),
'gloves' => array(
'will' => 114,
),
'trousers' => array(
'will' => 78,
),
'boots' => array(
'will' => 78,
),
),
)
);
从这个例子(我将担心稍后比较其他统计数据),“理想”的部分将是,来自set1的帽子和靴子,来自set2的衬衫和裤子,以及来自set3的手套和肩膀。
我的查询是如何最好地计算一个循环,它可以生成每个排列的'结果'数组,以便稍后进行比较。
答案 0 :(得分:2)
以下是this guy的实施:
function array_cartesian_product($arrays)
{
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
for ($i = 0; $i < $size; $i ++)
{
$result[$i] = array();
for ($j = 0; $j < $sizeIn; $j ++)
array_push($result[$i], current($arrays[$j]));
for ($j = ($sizeIn -1); $j >= 0; $j --)
{
if (next($arrays[$j]))
break;
elseif (isset ($arrays[$j]))
reset($arrays[$j]);
}
}
return $result;
}
$combinations = array_cartesian_product($sets);
以下是一个简单的测试用例:http://phpfiddle.org/main/code/m1i-w7m