为了优化输出,我最近遇到了一种情况,我必须得到数组内所有数组键。我查看了几个地方(包括StackOverflow),但找不到解决方案,因为大多数地方都与排列相关而不是组合。查找数组键与值的组合
鉴于此输入
$input = ['jack' => 11, 'moe' => 12, 'shane' => 12];
输出应该是这样的(一个阵列内的顺序并不重要)。
$output = [
['jack' => 11],
['jack' => 11, 'moe' => 12]
['jack' => 11, 'moe' => 12, 'shane' => 12]
['moe' => 12],
['moe' => 12, 'shane' => 12]
['shane' => 12],
['shane' => 12, 'jack' => 11]
];
我试过这个,但经过第三次迭代后它不起作用。
function combination(array $inputs, array $temp, &$collect) {
if (!empty($temp)) {
$collect[] = $temp;
}
for ($i = 0; $i < sizeof($inputs); $i++) {
$inputCopy = $inputs;
$elem = array_splice($inputCopy, $i, 1);
if (count($inputCopy) > 0) {
$temp[array_keys($elem)[0]] = array_values($elem)[0];
combination($inputCopy, $temp, $collect);
} else {
$temp[array_keys($elem)[0]] = array_values($elem)[0];
$collect[] = $temp;
$temp = [];
}
$i++;
}
}
虽然我需要PHP甚至是Python甚至Python(不使用itertools组合),但Java,Javascript将适用于我。
我不得不在你的例子中做一些改变,但它的工作。非常感谢你。 – nicholasnet