我需要简化这种方法用递归来摆脱重复的业务逻辑,但我无法弄清楚如何做到这一点:简化此方法使用递归
public function compute()
{
$ret = array();
foreach ($this->_items as $item) {
$ret[] = array($item);
}
foreach ($this->_items as $item) {
foreach ($this->_items as $item2) {
$tmp = array($item, $item2);
if (count($tmp) === count(array_unique($tmp))) {
$ret[] = $tmp;
}
}
}
foreach ($this->_items as $item) {
foreach ($this->_items as $item2) {
foreach ($this->_items as $item3) {
$tmp = array($item, $item2, $item3);
if (count($tmp) === count(array_unique($tmp))) {
$ret[] = $tmp;
}
}
}
}
return $ret;
}
编辑:
这种方法应该返回数组元素的所有组合,所以如果你有数组,如:
[a, b, c]
它将返回:
[
[a],
[b],
[c],
[a, b],
[a, c],
[b, a],
[b, c],
[a, b, c],
[a, c, b],
[b, a, c],
[b, c, a],
[c, a, b],
[c, b, a]
]
什么是你的代码的目标是什么? –
对于'print_r($ this-> items)'还有'print_r($ ret)''''''''''这样我就可以理解输入和期望的输出了。' – Baba
@Ofir Baruch我添加了这段代码的目标对我的问题。 –