2016-08-21 4 views
1

У меня есть плоский массив, который выглядит следующим образом: ExempleПлоский массив иерархическому многомерного массива

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]]', 

    ), 
    ) 
); 

я не могу выяснить, как это сделать. Я нашел другие примеры здесь для преобразования сплющенных массивов в многомерные, но не там, где есть пользовательский ребенок, подобный этому.

+0

hi thx для вашего комментария, но все еще не могу понять, как это сделать, не могли бы вы сделать это для меня! это хорошо будет так приятно вас .... –

ответ

0

Я должен сказать, что это немного непоследовательно хотят иметь листы в структуре данных имеют имя [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(), 
    ), 
), 
) 

См. Прогон на eval.in

+0

большое спасибо @trincot: D вы так хороши: D это именно то, что мне нужно –

Смежные вопросы