Php 递归数组列表类别

Php 递归数组列表类别,php,arrays,list,sorting,sub-array,Php,Arrays,List,Sorting,Sub Array,我有一个多维数组: Array ( [0] => Array ( [category_id] => 20 [category_name] => Category 1 [main_category] => 0 [sub_categories] => Array ( [0] => Array (

我有一个多维数组:

Array ( [0] => Array ( [category_id] => 20 [category_name] => Category 1 [main_category] => 0 [sub_categories] => Array ( [0] => Array ( [category_id] => 25 [category_name] => Category 1.3 [main_category] => 20 [sub_categories] => ) [1] => Array ( [category_id] => 26 [category_name] => Category 1.4 [main_category] => 20 [sub_categories] => Array ( [0] => Array ( [category_id] => 30 [category_name] => Category 1.4.1 [main_category] => 26 [sub_categories] => ) [1] => Array ( [category_id] => 31 [category_name] => Category 1.4.2 [main_category] => 26 [sub_categories] => ) ) ) [1] => Array ( [category_id] => 19 [category_name] => Category 2 [main_category] => 0 [sub_categories] => ) ) 将成为:

Array ( [0] => Array ( [category_id] => 20 [category_name] => Category 1 ) [1] => Array ( [category_id] => 25 [category_name] => Category 1 -> Category 1.3 ) [2] => Array ( [category_id] => 26 [category_name] => Category 1 -> Category 1.4 ) [3] => Array ( [category_id] => 30 [category_name] => Category 1 -> Category 1.4 -> Category 1.4.1 ) [4] => Array ( [category_id] => 31 [category_name] => Category 1 -> Category 1.4 -> Category 1.4.2 ) [5] => Array ( [category_id] => 19 [category_name] => Category 2 ) )
可以以递归方式循环所有数据。执行此操作时,将所有祖先传递给下一级子级,并将所有祖先添加到一个新变量中,比如$result,最后打印它们

片段:


演示:

您也可以使用此功能。这更容易理解

function getCats($data, array &$ar, $res = ''){ 
    foreach($data as $arr){ 
        // build a new Categ-s string
        $res_new = ''; 
        $res_new .= $arr['category_name'] && $res ? 
               $res.' -> '.$arr['category_name'] : 
               $arr['category_name']; 

        // pushing data to the resultant array
        $ar[] = ["category_id"=>$arr['category_id'], "category_name"=>$res_new, ];

        // if it has sub_cat-s - use recursion
        if(is_array($arr['sub_categories']) && count($arr['sub_categories'])>0){   
            getCats($arr['sub_categories'], $ar, $res_new);  
        }  
    }
}

$ares = [];
getCats($data,$ares);
print_r($ares);

你已经试过什么了?请用var_导出而不是打印。谢谢,这让我非常高兴far@k10f3100很高兴我能帮忙:
function getCats($data, array &$ar, $res = ''){ 
    foreach($data as $arr){ 
        // build a new Categ-s string
        $res_new = ''; 
        $res_new .= $arr['category_name'] && $res ? 
               $res.' -> '.$arr['category_name'] : 
               $arr['category_name']; 

        // pushing data to the resultant array
        $ar[] = ["category_id"=>$arr['category_id'], "category_name"=>$res_new, ];

        // if it has sub_cat-s - use recursion
        if(is_array($arr['sub_categories']) && count($arr['sub_categories'])>0){   
            getCats($arr['sub_categories'], $ar, $res_new);  
        }  
    }
}

$ares = [];
getCats($data,$ares);
print_r($ares);