如何在PHP中从数组列表创建值的嵌套组合

如何在PHP中从数组列表创建值的嵌套组合,php,arrays,algorithm,Php,Arrays,Algorithm,我的结构如下: $arr = array( array('123', '456'), array('Red', 'Blue', 'Green'), array('Test1', 'Test2'), ); 我想用以下格式创建这些值的嵌套组合: Array ( [123] => Array ( [Red] => Array ( [Test1]

我的结构如下:

$arr = array(
    array('123', '456'),
    array('Red', 'Blue', 'Green'),
    array('Test1', 'Test2'),
);
我想用以下格式创建这些值的嵌套组合:

Array
(
    [123] => Array
        (
            [Red] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
            [Blue] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
            [Green] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
        )
    [456] => Array
        (
            [Red] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
            [Blue] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
            [Green] => Array
                (
                     [Test1] => Null
                     [Test2] => Null
                )
        )
)
输入数组可以有不同数量的数组和值。应尊重各要素的顺序


我怎样才能存档?谢谢你的帮助!谢谢。

更精确的版本可能会对您有所帮助

$newarray = array();

    foreach($arr[0] as $key=>$value){
        foreach($arr[1] as $key=>$value1){
            foreach($arr[2] as $key=>$value2){
                $newarray[$value][$value1][$value2] = 'Null';
            }
        }
    } 
输出将是相同的

    Array
(
    [123] => Array
        (
            [Red] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Blue] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Green] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

        )

    [456] => Array
        (
            [Red] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Blue] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Green] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

        )

    )

更精确的版本可能会对您有所帮助

$newarray = array();

    foreach($arr[0] as $key=>$value){
        foreach($arr[1] as $key=>$value1){
            foreach($arr[2] as $key=>$value2){
                $newarray[$value][$value1][$value2] = 'Null';
            }
        }
    } 
输出将是相同的

    Array
(
    [123] => Array
        (
            [Red] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Blue] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Green] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

        )

    [456] => Array
        (
            [Red] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Blue] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

            [Green] => Array
                (
                    [Test1] => Null
                    [Test2] => Null
                )

        )

    )
注意:由于答案已经发布,我将发布我的答案。但正如评论中提到的,你需要先展示自己的尝试。请下次再做

可以使用递归函数将第一个维度的键映射到以下维度的结果,依此类推:

$arr = [
  ['123', '456'],
  ['Red', 'Blue', 'Green'],
  ['Test1', 'Test2']
];

function getCombinations(array $dimensions): array
{
  $combinations = [];
  $first_dimension = reset($dimensions) ?: [];

  foreach ($first_dimension as $value) {
    $combinations[$value] = count($dimensions) > 1 
      ? getCombinations(array_slice($dimensions, 1)) 
      : null;
  }

  return $combinations;
}

print_r(getCombinations($arr));
演示:

注意:由于答案已经发布,我将发布我的答案。但正如评论中提到的,你需要先展示自己的尝试。请下次再做

可以使用递归函数将第一个维度的键映射到以下维度的结果,依此类推:

$arr = [
  ['123', '456'],
  ['Red', 'Blue', 'Green'],
  ['Test1', 'Test2']
];

function getCombinations(array $dimensions): array
{
  $combinations = [];
  $first_dimension = reset($dimensions) ?: [];

  foreach ($first_dimension as $value) {
    $combinations[$value] = count($dimensions) > 1 
      ? getCombinations(array_slice($dimensions, 1)) 
      : null;
  }

  return $combinations;
}

print_r(getCombinations($arr));

演示:

注意,作为一个例子,我没有为数据类型构建任何错误检查。您必须使用它以最适合您的使用情况

对于解决问题的例程,首先,首先生成输入数组最后一个索引的数组。然后我有另一个函数(makeArray),它将生成一个包含两个参数的数组,$make和$with。makeArray,返回一个数组,该数组的索引基于参数$make中每个数组索引的字符串值。使用makeArray生成的数组的每个索引都被分配$with参数的值

之后,ToStructure函数根据输入数组的最后一个索引生成第一个数组。它从最高索引到最低索引遍历输入数组。每次,它都使用两个参数调用makeArray函数,即它当前所在的索引或输入数组,以及它已经作为输出的内容。然后将该值分配回输出变量

把这想象成从下到上的建筑

$arr = array(
    array('123', '456'),
    array('Red', 'Blue', 'Green'),
    array('Test1', 'Test2'),
);

function toStructural( $arr ){
    $output = [];
    $lastIndex = count($arr) - 1;

    for ($i = 0; $i < count($arr[$lastIndex]); $i++ ){
        $output[$arr[$lastIndex][$i]] = null;
    }

    for ($i = $lastIndex - 1; $i > -1; $i--){
        $output = makeArray($arr[$i],$output);
    }
    return $output;
}

function makeArray( $make, $with ){
    $output = [];
    for( $i = 0; $i < count($make); $i++ ){
        $output[$make[$i]] = $with;
    }
    return $output;
}

var_dump(toStructural($arr));
$arr=array(
数组('123','456'),
数组(“红色”、“蓝色”、“绿色”),
数组('Test1','Test2'),
);
功能到结构($arr){
$output=[];
$lastIndex=计数($arr)-1;
对于($i=0;$i-1;$i--){
$output=makeArray($arr[$i],$output);
}
返回$output;
}
函数makeArray($make,$with){
$output=[];
对于($i=0;$i
请注意,例如,我没有为数据类型生成任何错误检查。您必须使用它以最适合您的使用情况

对于解决问题的例程,首先,首先生成输入数组最后一个索引的数组。然后我有另一个函数(makeArray),它将生成一个包含两个参数的数组,$make和$with。makeArray,返回一个数组,该数组的索引基于参数$make中每个数组索引的字符串值。使用makeArray生成的数组的每个索引都被分配$with参数的值

之后,ToStructure函数根据输入数组的最后一个索引生成第一个数组。它从最高索引到最低索引遍历输入数组。每次,它都使用两个参数调用makeArray函数,即它当前所在的索引或输入数组,以及它已经作为输出的内容。然后将该值分配回输出变量

把这想象成从下到上的建筑

$arr = array(
    array('123', '456'),
    array('Red', 'Blue', 'Green'),
    array('Test1', 'Test2'),
);

function toStructural( $arr ){
    $output = [];
    $lastIndex = count($arr) - 1;

    for ($i = 0; $i < count($arr[$lastIndex]); $i++ ){
        $output[$arr[$lastIndex][$i]] = null;
    }

    for ($i = $lastIndex - 1; $i > -1; $i--){
        $output = makeArray($arr[$i],$output);
    }
    return $output;
}

function makeArray( $make, $with ){
    $output = [];
    for( $i = 0; $i < count($make); $i++ ){
        $output[$make[$i]] = $with;
    }
    return $output;
}

var_dump(toStructural($arr));
$arr=array(
数组('123','456'),
数组(“红色”、“蓝色”、“绿色”),
数组('Test1','Test2'),
);
功能到结构($arr){
$output=[];
$lastIndex=计数($arr)-1;
对于($i=0;$i-1;$i--){
$output=makeArray($arr[$i],$output);
}
返回$output;
}
函数makeArray($make,$with){
$output=[];
对于($i=0;$i
您自己尝试过任何东西吗?使用循环或数组漫游功能这是一种静态结构还是数组中可以有3个以上的数组?您自己尝试过任何东西吗?使用循环或数组漫游功能这是一种静态结构还是数组中可以有3个以上的数组?前肢无键时更整洁。如何处理原始数组中数量可变的元素?前额中没有键时会更整洁。您将如何处理原始数组中数量可变的元素?谢谢。这是一个很好的解决方案。谢谢。这是一个非常好的解决方案。