PHP函数显示问题

时间:2010-08-26 04:29:23

标签: php mysql

我正在尝试让我的功能连续显示3个链接,然后开始一个新行并显示其他3个链接,依此类推,但我的代码无法正常工作 显示我的链接都错了。

当前输出。

<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);

2 个答案:

答案 0 :(得分: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++;
    }
}

答案 1 :(得分: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)也会改变。

我们试一试,让我知道。