2016-03-16 5 views
1

Я хотел бы создать рекурсивную функцию для извлечения данных из массива и организации тогда. Однако у меня есть некоторые трудности для создания правильной логики. Этот принцип должен применяться к любому субуровню до тех пор, пока он не закончится или ничего не будет найдено. Я хочу, чтобы предотвратить такого рода кода, повторяя Еогеасп внутри Еогеаспа ...:PHP - рекурсивная функция foreach

$cats = get_categories($args); 
$categories = array(); 
foreach($cats as $cat){ 
    $parent = $cat->category_parent; 
    if ($parent) { 
      $categories['child'][$parent][$cat->cat_ID] = $cat->name; 
     } else { 
      $categories['parent'][$cat->cat_ID] = $cat->name; 
     } 
    } 
} 

if (isset($categories['parent']) && !empty($categories['parent'])) { 
     foreach($categories['parent'] as $id => $cat){ 

      $new_cats[$id]['title'] = $cat; 

      if (isset($categories['child'][$id])) { 
       foreach($categories['child'][$id] as $child_id => $child_cat){ 

        $new_cats[$child_id]['title'] = $child_cat; 
        $new_cats[$child_id]['parent_id'] = $id; 

        if (isset($categories['child'][$child_id])) { 
         foreach($categories['child'][$child_id] as $sub_child_id => $sub_child_cat){ 

          $new_cats[$sub_child_id]['title'] = $sub_child_cat; 
          $new_cats[$sub_child_id]['parent_id'] = $child_id; 

         } 
        } 

       } 
      } 
     } 

    } 
} 
+0

Можете ли вы сделать небольшой пример массив как 5 элементов, от того, что у вас есть и в какой форме вы хотите получить его в – Rizier123

+1

Этот код вызывает головокружение со всеми этими дочерними и дочерними ... И наличие родительских и дочерних идентификаторов в одном измерении также кажется странным – Rizier123

+1

Эта функция работает, но требует, чтобы вручную время foreach позволяло глубже глубже получить детей в моем случае. Я думаю, что рекурсивная функция должна соответствовать моему делу, но у меня есть некоторые трудности с ее созданием. – freaky

ответ

0

Может быть этим код поможет вам получить представление для форматирования нужного формата массив.

<?php 
// Main function 
function BuildArr($arr) 
{ 
    $formattedArr = array(); 
    if(!empty($arr)) 
    { 
     foreach($arr as $val) 
     { 
      if($val['has_children']) 
      { 
       $returnArr = SubBuildArr($val['children']); // call recursive function 
       if(!empty($rs)) 
       { 
        $formattedArr[] = $returnArr; 
       } 
      } 
      else 
      { 
       $formattedArr[] = $val;   
      } 
     } 
    } 
    return $formattedArr; 
} 

// Recursive Function(Build child) 
function SubBuildArr($arr) 
{ 
    $sub_fortmattedArr = array(); 
    if(!empty($arr)) 
    { 
     foreach($arr as $val) 
     { 
      if($val['has_children']) 
      { 
       $response = SubBuildArr($val['children']); // call recursive 
       if(!empty($response)) 
       { 
        $sub_fortmattedArr[] = $response; 
       } 
      } 
      else 
      { 
       $sub_fortmattedArr[] = $arr; 
      } 
     } 
     return $sub_fortmattedArr; 
    } 
} 
?> 

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

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