Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 平面阵列到分层多维阵列_Php_Arrays_Recursion_Multidimensional Array - Fatal编程技术网

Php 平面阵列到分层多维阵列

Php 平面阵列到分层多维阵列,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有一个平面阵列,看起来像这个示例: array ( 0 => array ( 'TreePad_Fields' => array ( '@ID' => '1', '@NAME' => '[CDATA[nomenclature exemple]]', '@LEVEL' => '0', ), ), 1

我有一个平面阵列,看起来像这个示例:

    array (
      0 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '1',
          '@NAME' => '[CDATA[nomenclature exemple]]',
          '@LEVEL' => '0',
        ),
      ),
      1 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '3',
          '@NAME' => '[CDATA[droit]]',
          '@LEVEL' => '1',
        ),
      ),
      2 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '13',
          '@NAME' => '[CDATA[législation]]',
          '@LEVEL' => '2',
        ),
      ),
      3 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '14',
          '@NAME' => '[CDATA[statuts]]',
          '@LEVEL' => '3',
        ),
      ),
      4 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '15',
          '@NAME' => '[CDATA[projets de loi]]',
          '@LEVEL' => '4',
        ),
      ),
      5 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '16',
          '@NAME' => '[CDATA[réglementations]]',
          '@LEVEL' => '2',
        ),
      ),
      6 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '17',
          '@NAME' => '[CDATA[instruments statutaires]]',
          '@LEVEL' => '3',
        ),
      ),
      7 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '2',
          '@NAME' => '[CDATA[économie]]',
          '@LEVEL' => '1',
        ),
      ),
      8 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '8',
          '@NAME' => '[CDATA[analyse cout-avantage]]',
          '@LEVEL' => '2',
        ),
      ),
      9 => 
      array (
        'TreePad_Fields' => 
        array (
          '@ID' => '6',
          '@NAME' => '[CDATA[analyse socio-économique]]',
          '@LEVEL' => '2',
        ),
      ),
    )
我想这样:

 $data = array(
    '[CDATA[nomenclature exemple]]' => array(
      '[CDATA[droit]]' => array(
        '[CDATA[législation]]' => array(
          '[CDATA[statuts]]' => array(
            '[CDATA[projets de loi]]'
          ),
        ),
        '[CDATA[réglementations]]' => array(
          '[CDATA[instruments statutaires]]'
        ),
      ),
      '[CDATA[économie]]' => array(
        '[CDATA[analyse cout-avantage]]',
        '[CDATA[analyse socio-économique]]',

      ),
    )
  );

我不知道怎么做。我在这里找到了其他将扁平数组转换为多维数组的示例,但没有这样的自定义子数组。

我应该说,希望数据结构中的叶子将
[CDATA…]
名称作为索引数组的值,而在树的其余部分它们是键,这有点不一致

因此,我建议让这些叶子也由
[CDATA…]
名称键入,但只使用一个空数组作为值。这样,整个结构是一致的

对于该结构,您可以使用以下功能:

function buildTree($data) {
    foreach($data as $i => $row) {
        $arr = $row['TreePad_Fields'];
        $level = $arr['@LEVEL'];
        $key = $arr['@NAME'];
        $levels[$level][$key] = [];
        $levels[$level+1] = &$levels[$level][$key];
    }
    return $levels[0];
}
可以这样称呼:

$result = buildTree($data);
对于给定的样本数据,结果为:

array (
  '[CDATA[nomenclature exemple]]' => array (
    '[CDATA[droit]]' => array (
      '[CDATA[législation]]' => array (
        '[CDATA[statuts]]' => array (
          '[CDATA[projets de loi]]' => array (),
        ),
      ),
      '[CDATA[réglementations]]' => array (
        '[CDATA[instruments statutaires]]' => array (),
      ),
    ),
    '[CDATA[économie]]' => array (
      '[CDATA[analyse cout-avantage]]' => array (),
      '[CDATA[analyse socio-économique]]' => array (),
    ),
  ),
)

查看它在

上运行我应该说,希望数据结构中的叶子将
[CDATA…]
名称作为索引数组的值,而在树的其余部分它们是键,这有点不一致

因此,我建议让这些叶子也由
[CDATA…]
名称键入,但只使用一个空数组作为值。这样,整个结构是一致的

对于该结构,您可以使用以下功能:

function buildTree($data) {
    foreach($data as $i => $row) {
        $arr = $row['TreePad_Fields'];
        $level = $arr['@LEVEL'];
        $key = $arr['@NAME'];
        $levels[$level][$key] = [];
        $levels[$level+1] = &$levels[$level][$key];
    }
    return $levels[0];
}
可以这样称呼:

$result = buildTree($data);
对于给定的样本数据,结果为:

array (
  '[CDATA[nomenclature exemple]]' => array (
    '[CDATA[droit]]' => array (
      '[CDATA[législation]]' => array (
        '[CDATA[statuts]]' => array (
          '[CDATA[projets de loi]]' => array (),
        ),
      ),
      '[CDATA[réglementations]]' => array (
        '[CDATA[instruments statutaires]]' => array (),
      ),
    ),
    '[CDATA[économie]]' => array (
      '[CDATA[analyse cout-avantage]]' => array (),
      '[CDATA[analyse socio-économique]]' => array (),
    ),
  ),
)

看到它在

hi-thx上运行以获取您的评论,但仍然不知道如何操作,请您为我制作!!你真是太好了…你好,谢谢你的评论,但还是不知道怎么做,你能帮我做吗!!你真是太好了……非常感谢@trincot:D你太好了:D这正是我需要的谢谢你@trincot:D你太好了:D这正是我需要的