【发布时间】:2011-08-23 11:31:42
【问题描述】:
这两天我一直在疯狂地试图完成这个,也许你能启发我。这是一个马投注排列。每次用户播放时,我都会得到一个多维数组(2 个级别)。第一级包含比赛 ID,第二级包含用户为该比赛选择的马。它看起来像这样:
$play = array
(
'4' => array(7, 32),
'8' => array(4),
'2' => array(9),
'12' => array('5'),
'83' => array('10', '11', '12', ''),
'9' => array('3'),
);
我需要知道这出戏的所有可能组合是什么。使用此功能可以轻松完成:
function permutations(array $array)
{
switch (count($array)) {
case 1:
return $array[0];
break;
case 0:
throw new InvalidArgumentException('Requires at least one array');
break;
}
$a = array_shift($array);
$b = permutations($array);
$return = array();
foreach ($a as $key => $v) {
if(is_numeric($v))
{
foreach ($b as $key2 => $v2) {
$return[] = array_merge(array($v), (array) $v2);
}
}
}
return $return;
}
这会完美地返回一个包含所有可能组合的数组。到目前为止一切顺利,结果如下所示:
Array
(
[0] => Array
(
[0] => 7
[1] => 4
[2] => 9
[3] => 5
[4] => 10
[5] => 3
)
[1] => Array
(
[0] => 7
[1] => 4
[2] => 9
[3] => 5
[4] => 11
[5] => 3
)
[2] => Array
(
[0] => 7
[1] => 4
[2] => 9
[3] => 5
[4] => 12
[5] => 3
)
[3] => Array
(
[0] => 32
[1] => 4
[2] => 9
[3] => 5
[4] => 10
[5] => 3
)
[4] => Array
(
[0] => 32
[1] => 4
[2] => 9
[3] => 5
[4] => 11
[5] => 3
)
[5] => Array
(
[0] => 32
[1] => 4
[2] => 9
[3] => 5
[4] => 12
[5] => 3
)
)
我的问题:我需要将每匹马的数组“键”作为“种族 ID”,而不是 0、1、2、3。 我需要这样的结果:
Array
(
[0] => Array
(
[4] => 7
[8] => 4
[2] => 9
[12] => 5
[83] => 10
[9] => 3
)
[1] => Array
(
[4] => 7
[8] => 4
[2] => 9
[12] => 5
[83] => 11
[9] => 3
)
[2] => Array
(
[4] => 7
[8] => 4
[2] => 9
[12] => 5
[83] => 12
[9] => 3
)
[3] => Array
(
[4] => 32
[8] => 4
[2] => 9
[12] => 5
[83] => 10
[9] => 3
)
[4] => Array
(
[4] => 32
[8] => 4
[2] => 9
[12] => 5
[83] => 11
[9] => 3
)
[5] => Array
(
[4] => 32
[8] => 4
[2] => 9
[12] => 5
[83] => 12
[9] => 3
)
)
我怎样才能做到这一点?我知道这是一个很长的帖子,但我需要绘制这个。我在围绕函数递归时遇到问题,并且在每个循环中都完全迷失了。
【问题讨论】:
-
为什么在你的初始数组中有些值是数字,有些是字符串?为什么是空的?
-
因为它来自一个 HTML 复选框数组,所以用户可能会留下一些复选框为空。 permutations() 函数忽略不是整数的值。这不是问题:)
-
如何使用密钥请粘贴一些您希望制作的有效数组示例。
-
最后一个代码块包含需要的数组结构。谢谢!
标签: php recursion multidimensional-array permutation combinations