請參考解決方案,此問題已解決。遞歸 - 如何構造沒有ID的數據樹,數據是模糊的。
我有下面的數據集,沒有提供id,試圖使用遞歸完成這個。
我應該嘗試這個還是應該去另一條路線?因爲沒有ID。
經過對每個屬性的過濾器後,根是性別,節點1是類別,結束節點是標籤。我試圖使用array_merge_recursive,array_push和我試圖構建我自己的遞歸模式,但似乎沒有得到我想要的模式。
JSON數據:
[{"label":"Shirts","tag":"M_SHIRT","gender":"Men","category":"Clothing"},
{"label":"Pants","tag":"M_PANT","gender":"Men","category":"Clothing"},
{"label":"Shorts","tag":"M_SHORT","gender":"Men","category":"Clothing"},
{"label":"Casual","tag":"M_SHOE_CASUAL","gender":"Men","category":"Shoes"},
{"label":"Tennis","tag":"M_SHOE_TENNIS","gender":"Men","category":"Shoes"},
{"label":"Watches","tag":"M_ACCESS_WATCH","gender":"Men","category":"Accessories"},
{"label":"Belts","tag":"M_ACCESS_BELT","gender":"Men","category":"Accessories"},
{"label":"Ties","tag":"M_ACCESS_TIE","gender":"Men","category":"Accessories"}]
Men
->Accessories
->Watches
->Belts
->Ties
->Clothing
->Pants
->Shirts
->Shorts
->Shoes
->Casual
->Tennis
這裏是我的遞歸這是凌亂的PHP代碼:
function buildSideBar($searchLayers){
try{
$sidebar;
$count = 0;
foreach($searchLayers[$count] as $root){
//$sideBarData[]=array("root"=>$root);
$sideBarData[]=$root;
$searchLayers[$count]='';
$this->addChildren($sideBarData,$searchLayers,1,$root, $count);
$count++;
}
var_dump($sideBarData);
}catch (Exception $ex){
log($ex);
}
}
function addChildren(&$sideBarData,$layers,$level,$parent,$count){
if(!empty($layers[$level]) && is_array($layers[$level])){
foreach($layers[$level] as $child){
//check if child is a node
if($this->verifyChildBelongsToParent($child,$parent)){
if($level==1)
{
$count = 0;
// $sideBarData = array_merge_recursive($sideBarData, array("root"=>array("child".$level=>$child)));
$sideBarData[0][$level] = $child;
}
else
{
$sideBarData[][][$level] = $child;
}
$parents[]=$parent;
$parents[]=$child;
//var_dump($parents);
if($level<3)
{
// $this->addChildren($sideBarData,$layers,$level++,$parents);
}
}
//
}
}
}
function verifyChildBelongsToParent($child,$parent){
//var_dump($this->categoryData);break;
foreach($this->categoryData as $category){
if(is_array($parent) && sizeof($parent)>1){
echo 'Child' . $child;
echo 'PARENTS ';
var_dump($parent);
var_dump($category);
if(strcmp($category->getGender(),$parent[0])==0 && strcmp($category->getCategory(),$parent[1])==0)
{
var_dump($child);
echo 'Add child ' . $child;
return true;
}
}
else{
//echo 'check if ' . $parent .' has child ' . $child;
if(strcmp($category->getGender(),$parent)==0)
{
// var_dump($parent);
// var_dump($child);
// echo 'Add Child';
return true;
}
}
}
return false;
}
下面是我通過在$ searchLayers數據:
Array
(
[0] => "MEN",
[1] => Array(
[0]=>'Accessories',
[1]=>'Clothing',
[2]=>'Shoes'
),
[2] =>Array(
[0]=>'Belts',
[1]=>'Casual',
[2]=>'Shirts',
[3]=>'Shorts',
[4]=>'Tennis',
[5]=>'Ties',
[6]=>'Watches'
)
);
這是一個簡單的'foreach' - 你有什麼需要使用遞歸的原因嗎? –
@DarraghEnright構建菜單的直接foreach,你能提供一個代碼模板作爲解決方案嗎?我想查看它。 :) – mcv
@RyanVincent是的,我看到了。我認爲提供給我的這些樣本數據實際上缺乏地區。我解決了這個問題,因爲我在下面發佈了我的解決方案。我仍然歡迎任何人發佈更簡單的解決方案。 :) – mcv