2016-01-20 1 views
0

Я пытаюсь сделать многомерный массив построить путь массива при добавлении в hr поле, так это выглядит следующим образом:Рекурсивное Создание массива из другого массива

Я просто не могу понять, как добавить итоговые , а также создать подматрицу так, чтобы точка-нота в опции тоже. Моя цель состоит в том, чтобы получить что-то вроде этого:

 [1] => [1][2][1][5][0][6] = 35 (the second child path "1") 
     [1] => [1][2][1][5][0][7] = 25 

или что-то вроде этого:

array (
     [children.0.children.0.children.0.total] = 20 
     [children.0.children.1.children.1.total] = 35 
     // etc 
    ) 

Сложная часть является то, что она идет в разных направлениях, и я хочу знать, что такое наивысшее и наименьшее общее количество на основе пути:

== Run Code Here или копия/вставка

// ------------- 
// The Flattener 
// ------------- 
function doit($myArray) { 

    $iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray)); 
    $result = array(); 
    foreach ($iter as $leafKey => $leafValue) { 
     $keys = array(); 
     foreach (range(0, $iter->getDepth()) as $depth) { 
      $keys[] = $iter->getSubIterator($depth)->key(); 
     } 
     $result[ join('.', $keys) ] = $leafValue; 
    } 

    return $result; 
} 

// ------------- 
// Example Tree 
// ------------- 
$tree = [ 
    'id' => 1, 
    'type' => 'note', 
    'data' => [], 
    'children' => [ 
     [ 
      'id' => 2, 
      'type' => 'wait', 
      'data' => [ 
       'hr' => 10, 
      ], 
      'children' => [ 
       [ 
        'id' => 3, 
        'type' => 'wait', 
        'data' => [ 
         'hr' => 10, 
        ], 
        'children' => [ 
         'id' => 4, 
         'type' => 'exit', 
         'data' => [], 
         'children' => [] 
        ] 
       ], 
       [ 
        'id' => 5, 
        'type' => 'note', 
        'data' => [ 
         'hr' => 10, 
        ], 
        'children' => [ 
         [ 
          'id' => 6, 
          'type' => 'wait', 
          'data' => [ 
           'hr' => 10, 
          ], 
          'children' => [] 
         ], 
         [ 
          'id' => 7, 
          'type' => 'exit', 
          'data' => [], 
          'children' => [] 
         ], 

        ] 
       ] 
      ], 
     ] 
    ] 
];  

$result = doit($tree); 

print_r($result); 

ответ

0

Это, кажется, работает, я нашел его где-то в Интернете в течение всего дня.

array_reduce(array_reverse($keys), function($parent_array, $key) { 
    return $parent_array ? [$key => $parent_array] : [$key]; 
}, null); 
Смежные вопросы