2013-04-08 69 views
0

把一个阵列中的醇现在我有了一个PARENT_ID &我想我需要使用递归来完成我想要做的我怎么会在laravel

array 
    0 => 
    object(Menu)[56] 
     public 'attributes' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    1 => 
    object(Menu)[60] 
     public 'attributes' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    2 => 
    object(Menu)[61] 
     public 'attributes' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 

array 
    0 => 
    object(Menu)[56] 
     public 'attributes' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    1 => 
    object(Menu)[60] 
     public 'attributes' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    2 => 
    object(Menu)[61] 
     public 'attributes' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 

array 
    0 => 
    object(Menu)[56] 
     public 'attributes' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    1 => 
    object(Menu)[60] 
     public 'attributes' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    2 => 
    object(Menu)[61] 
     public 'attributes' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 

array 
    0 => 
    object(Menu)[56] 
     public 'attributes' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '1' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'home' (length=4) 
      'menu_url' => string 'test' (length=4) 
      'parent_id' => string '0' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    1 => 
    object(Menu)[60] 
     public 'attributes' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '2' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Contact Us' (length=10) 
      'menu_url' => string 'contact' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 
    2 => 
    object(Menu)[61] 
     public 'attributes' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'original' => 
     array 
      'id' => string '3' (length=1) 
      'menu_id' => string '1' (length=1) 
      'menu_name' => string 'Privacy Docs' (length=12) 
      'menu_url' => string 'privacy' (length=7) 
      'parent_id' => string '1' (length=1) 
      'position' => string '0' (length=1) 
      'group_id' => string '1' (length=1) 
      'menu_items' => null 
     public 'relationships' => 
     array 
      empty 
     public 'exists' => boolean true 
     public 'includes' => 
     array 
      empty 

现在一个阵列I有一个函数在一个名为menuHelper

public static function make(array $array, $no = 0) { 
     var_dump($array); 
     $child = self::hasChildren($array, $no); 
     if (empty($child)) 
      return ""; 
     $content = "<li>\n"; 
     foreach ($child as $value) { 
      $content = sprintf("\t<li><div>%s</div>" . self::make($array, $value->id) . "</li>\n", $value->menu_name); 
      //$content .= self::make($array, $value->id); 
     } 
     $content .= "</li>\n"; 
     //return $content; 
     return($content == '' ? '' : "<ol>" . $content . "</ol>"); 
    } 
public static function hasChildren($array, $id) { 
     return array_filter($array, function ($var) use($id) { 
        return $var->parent_id == $id; 
       }); 
    } 

类,我想这个输出这些

<ol class="sortable"> 
    <li> 
     <div>parent</div> 
     <ol> 
      <div>Sub</div> 
      <ol> 
       <div>Sub 2</div> 
      </ol> 
     </ol> 
    </li> 
    <li> 
     <div>parent 2</div> 
     <ol> 
      <div>Sub</div> 
      <ol> 
       <div>Sub 2</div> 
      </ol> 
     </ol> 
    </li> 
</ol> 

但是,这不会输出父母,而是输出1父母,然后输出其子女。然后它退出输出,即使是另一个父母,所以我想我有什么问题?

+0

这不是关于存储数据,如果你看看这个问题。 – dragonfire1119 2013-04-08 03:58:53

+1

令人着迷,不知道这些行为如何针对这个问题,因为两者都针对其他人。 – David 2013-04-08 04:01:13

+0

发布你的数组。这将使中途完成 – 2013-04-08 04:07:13

回答

0

这是一个非常粗略的答案,因为你的问题很模糊,缺少细节。

你需要的是将你的主菜单项存储在一个数组中,然后遍历它们来绘制主菜单。然后,在循环浏览每个主菜单项时,查找/加载父项可能具有的任何子菜单项。如果有子菜单项 - 绘制子菜单。十分简单。

<ol class="sortable"> 
<?php 
$main_menu_items = array($first_menu_item, $second_menu_item); 
foreach($main_menu_items as $menu_item) 
{ 
    ?> 
    <li> 
    <div><?=$menu_item['menu_name']?></div> 
    <?php 
    $child_menu_items = get_child_menu_items($menu_item['menu_id']); 
    if(count($child_menu_items) > 0) 
    { 
     ?> 
     <ol> 
     <?php 
     foreach($child_menu_items as $child_item) 
     { 
      ?> 
      <li><div><?=$menu_item['menu_name']?></div></li> 
      <?php 
     } 
     ?> 
     </ol> 
     <?php 
    } 
    ?> 
    </li> 
    <?php 
} 
?> 
</ol> 
+0

对不起,我的问题含糊不清,我通常不会提问,但是这真的让我难住了。这个子菜单foreach循环将继续创建子菜单吗? https://gist.github.com/dragonfire1119/a9784a2821836411d634 – dragonfire1119 2013-04-08 05:26:13

+0

我想我可以把它放在一个函数,并不断调用该函数,并检查它是否有孩子? – dragonfire1119 2013-04-08 05:33:53

+0

为了处理深度为3的数组,你只需要在第二个foreach循环中添加一个foreach循环。如果你希望能够处理比这更深的数组,那么你需要将函数重写为递归 - 这更加复杂。看看WordPress的源代码,看看他们是如何做到的。 为了使用此代码,您必须创建一个函数来查找当前正在循环的菜单的子项。 – 2013-04-08 05:48:42