php数组使用相同的数组值合并递归并创建组合
您好,我是php新手,我只是停留在头脑风暴数组中,下面是php数组php数组使用相同的数组值合并递归并创建组合,php,arrays,recursion,combinations,Php,Arrays,Recursion,Combinations,您好,我是php新手,我只是停留在头脑风暴数组中,下面是php数组 [0] => Array ( [0] => Array ( [1] => 5 [2] => 12 [11] => 15 ) [1] => Array (
[0] => Array
(
[0] => Array
(
[1] => 5
[2] => 12
[11] => 15
)
[1] => Array
(
[1] => 5
[2] => 12
[11] => 16
)
[2] => Array
(
[1] => 4
[2] => 9
[11] => 15
)
[3] => Array
(
[1] => 3
[2] => 9
[11] => 15
)
[4] => Array
(
[1] => 3
[2] => 9
[11] => 16
)
[5] => Array
(
[1] => 3
[2] => 13
[11] => 15
)
[6] => Array
(
[1] => 3
[2] => 13
[11] => 16
)
[7] => Array
(
[1] => 3
[2] => 12
[11] => 15
)
[8] => Array
(
[1] => 3
[2] => 12
[11] => 16
)
[9] => Array
(
[1] => 4
[2] => 9
[11] => 16
)
[10] => Array
(
[1] => 4
[2] => 13
[11] => 15
)
[11] => Array
(
[1] => 4
[2] => 13
[11] => 16
)
[12] => Array
(
[1] => 4
[2] => 12
[11] => 15
)
[13] => Array
(
[1] => 4
[2] => 12
[11] => 16
)
[14] => Array
(
[1] => 5
[2] => 9
[11] => 15
)
[15] => Array
(
[1] => 5
[2] => 13
[11] => 16
)
)
我要把下面的东西放出去
[0]=> Array
(
[5]=> Array
(
[12]=> Array
(
[0] => 15
[1] => 16
)
[9]=> Array
(
[0] => 15
)
[13]=> Array
(
[0] => 16
)
)
[4]=> Array
(
[9]=> Array
(
[0] => 15
[1] => 16
)
[13]=> Array
(
[0] => 16
)
[12]=> Array
(
[0] => 15
[1] => 16
)
)
[3]=> Array
(
[9]=> Array
(
[0] => 15
[1] => 16
)
[13]=> Array
(
[0] => 15
[1] => 16
)
[12]=> Array
(
[0] => 15
[1] => 16
)
)
)
对不起,放不太清楚,但我想先检查每个数组的公共值,例如5、4和3,然后根据这些值遍历每个值并创建树数组
作为一个简单的例子,我希望每个数组首先包含元素,然后递归地检查数组值并创建新的数组
示例只有3个级别,但我需要递归n级,如果您能提供帮助,将不胜感激 不确定我是否理解正确,因为样本没有解释清楚,但我不知怎么地能够打印出所需的输出。通过评论给出的解释
// I just simplified your given array
$input[0] = array(
[1 => 5, 2 => 12, 11 => 15],
[1 => 5, 2 => 12, 11 => 16],
[1 => 4, 2 => 9, 11 => 15],
[1 => 3, 2 => 9, 11 => 15],
[1 => 3, 2 => 9, 11 => 16],
[1 => 3, 2 => 13, 11 => 15],
[1 => 3, 2 => 13, 11 => 16],
[1 => 3, 2 => 12, 11 => 15],
[1 => 3, 2 => 12, 11 => 16],
[1 => 4, 2 => 9, 11 => 16],
[1 => 4, 2 => 13, 11 => 15],
[1 => 4, 2 => 13, 11 => 16],
[1 => 4, 2 => 12, 11 => 15],
[1 => 4, 2 => 12, 11 => 16],
[1 => 5, 2 => 9, 11 => 15],
[1 => 5, 2 => 13, 11 => 16]
);
// Declare new output array
$output[0] = [];
// Loop thru each array inside $input[0] array
foreach($input[0] as $key => $value) {
// Set each array value to variables
$one = $value[1];
$two = $value[2];
$eleven = $value[11];
// Check if $one key already exist, create if not
if (!isset($output[0][$one])) {
$output[0][$one] = [];
}
// Check if $two key already exist, create if not
if (!isset($output[$one][$two])) {
$output[0][$one][$two] = [];
}
// push each $eleven
$output[0][$one][$two][] = $eleven;
};
// Prints output array
echo '<pre>';
print_r($output);
//我刚刚简化了给定的数组
$input[0]=数组(
[1 => 5, 2 => 12, 11 => 15],
[1 => 5, 2 => 12, 11 => 16],
[1 => 4, 2 => 9, 11 => 15],
[1 => 3, 2 => 9, 11 => 15],
[1 => 3, 2 => 9, 11 => 16],
[1 => 3, 2 => 13, 11 => 15],
[1 => 3, 2 => 13, 11 => 16],
[1 => 3, 2 => 12, 11 => 15],
[1 => 3, 2 => 12, 11 => 16],
[1 => 4, 2 => 9, 11 => 16],
[1 => 4, 2 => 13, 11 => 15],
[1 => 4, 2 => 13, 11 => 16],
[1 => 4, 2 => 12, 11 => 15],
[1 => 4, 2 => 12, 11 => 16],
[1 => 5, 2 => 9, 11 => 15],
[1 => 5, 2 => 13, 11 => 16]
);
//声明新的输出数组
$output[0]=[];
//循环通过$input[0]数组内的每个数组
foreach($key=>$value形式的输入[0]{
//将每个数组值设置为变量
$one=$value[1];
$two=$value[2];
$11=$value[11];
//检查$one键是否已存在,如果不存在,请创建
如果(!isset($output[0][$one])){
$output[0][$one]=[];
}
//检查$two键是否已存在,如果不存在,则创建
如果(!isset($output[$one][$two])){
$output[0][$one][$two]=[];
}
//每个推11美元
$output[0][$1][$2][]=$11;
};
//打印输出阵列
回声';
打印(输出);
如果不尝试,您的问题至少太宽泛了……您有更小的示例和输出数组吗?您是否还会提供创建输出阵列的方法?从你的例子中不明显。@bassxzero我想要每个数组的第一个元素,例如,如果你看到5,4和3是公共的,那么基于这个,再次循环检查每个元素,在5,4和3下找到公共的,然后构造数组。@FirstOne,我尝试使用array_shift构造数组,然后基于第一个元素尝试再次检查每个元素,但其工作仅为2级,因此我示例了3级数组并输出..Hi@erwin感谢您的帮助,这正是我想要的:)但代码仅限于三个值。。数组可能有4个或更多值。您的意思是输入数组可能有4个键/值?你能举个例子,比如说4个值吗?:)