2010-08-26 145 views
1

我试图让我的功能显示在连续3个环节,然后开始一个新行并显示其他3点环节等,但我的代码是不工作的权利 显示我的链接都错了。PHP函数显示问题

电流输出。

<div> 
    <p> 
     <a href="">A</a> 
    </p> 

    <p> 
     <a href="">>A1</a> 
    </p> 
<div> 
    <p> 
     <a href="">Glass &amp; Mosaics</a> 
    </p> 
</div> 

<div> 
    <p> 
     <a href="">>Handcrafted &amp; Finished Pieces</a> 
    </p> 
</div> 
</div> 
    <p> 
     <a href="">>Entrepreneurislism</a> 
    </p> 

    <p> 
     <a href="">>Photography</a> 
    </p> 
</div> 
</div> 

<div> 
    <p> 
     <a href="">>Antiques</a> 
    </p> 

    <p> 
     <a href="">>Antiquities</a> 
    </p> 

    <p> 
     <a href="">>Architectural &amp; Garden</a> 
    </p> 
</div> 
</div> 

<div></div> 

<div> 
    <p> 
     <a href="">>Cameras &amp; Photo1</a> 
    </p> 
</div> 
</div> 
</div> 
<div></div> 
</div> 

输出应该是。

Link1  Link2  Link3 
Link4  Link5  Link6 
Link7 

这是我的代码。

function make_list ($parent = 0, $parent_url = '', $ctr = 0) { 
    global $cat_link; 
    global $cat_id;   
    foreach ($parent as $id => $cat) { 
     if(!empty($cat['id'])) { 
      if($ctr%3 == 0) { 
       echo '<div>'; 
      } 

      if(in_array($cat['id'], $cat_id)){ 
       $url = $parent_url . $cat['url']; 
       echo '<p><a href="' . $url . '" title="' . $cat['category'] . ' Category Link" rel="Articles Category">' . $cat['category'] . '</a></p>';   
      } 

      $url = $parent_url . $cat['url'];      
      if(isset($cat_link[$id])) { 
       make_list($cat_link[$id], $url, $ctr+1); 
      } 

      if($ctr%3 == 0) { 
       echo '</div>'; 
      }    
     } 
    } 

    if($ctr%3 != 0) { 
     echo '</div>'; 
    } 

} 

$dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 

if(!$dbc) { 
    print mysqli_error($mysqli); 
} 

$cat_link = array(); 
while(list($id, $parent_id, $category, $url) = mysqli_fetch_array($dbc)) { 
    $cat_link[$parent_id][$id] = array('category' => $category, 'url' => $url, 'id' => $id); 
} 

make_list($cat_link[0], $url, $ctr); 
+0

的表可能会更好地工作,为了这个目的比的div和段落。 – cbednarski 2010-08-26 06:13:11

回答

0

默认<p>...</p><div>...</div>总会块(开始新行总是)让你的代码产生7行。

解决的方法很简单使用span代替<p>或不使用任何东西。

希望这会有所帮助。

更新:

function make_list ($parent = 0, $parent_url = '', $ctr = 0) { 
    global $cat_link; 
    global $cat_id;   
    $IDs = array_keys($parent); 
    $Count = count($IDs); 
    for ($i = 0; $i < $Count; $i++) { 
     echo '<div>'; 
     for($c = 0; ($c < 3) && ($i < $Count);) { 
      $ID = $IDs[$i++]; 
      $CAT = $parent[$ID]; 

      if(in_array($CAT['id'], $cat_id)) { 
       $URL  = $parent_url . $CAT['url']; 
       $Category = $CAT['category']; 
       echo "<a href='$URL' title='$Category Category Link' rel='Articles Category'>$Category</a>"; 
       $c++ 
      } 

      $URL = $parent_url . $CAT['url'];      
      if(isset($cat_link[$id])) { 
       make_list($cat_link[$id], $URL, $ctr+1); 
      } 
     } 
     echo '</div>'; 
    } 
} 

$dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 

if(!$dbc) { 
    print mysqli_error($mysqli); 
} 

$cat_link = array(); 
while(list($id, $parent_id, $category, $url) = mysqli_fetch_array($dbc)) { 
    $cat_link[$parent_id][$id] = array('category' => $category, 'url' => $url, 'id' => $id); 
} 

make_list($cat_link[0], $url, $ctr); 

我只是添加两个嵌套的循环:内循环三次,和外面的只是循环中的所有元素。关键是,每次内一个环,该元件循环索引(i)改变太多。

让我们试试吧,让我知道。

+0

尽管如此,仍然dosn't解决问题。 – bold 2010-08-26 04:44:49

+0

我的代码不会产生7个不同的行。 – bold 2010-08-26 04:51:07

+0

@bold:查看我的更新。 – NawaMan 2010-08-26 06:02:52

1

你拍摄什么,我想,是沿着这些路线的东西:

function make_list($parent) 
{ 
    $link_count = 0; 
    foreach($parent as $id => $category) 
    { 
     if($link_count % 3 == 0) echo '<div>'; 

     // display the link here 
     // call make_list here to display sub-categories in an inner <div> 

     if($link_count % 3 == 2) echo '</div>'; 

     $link_count++; 
    } 
}