PHP Foreach问题?

时间:2009-11-06 00:31:21

标签: php mysql

我正在尝试从MySQL数据库中显示$ url值,但我只能正确显示$ cat值,有人可以帮我学习如何显示$ url值。

我现在做错了。

这是部分代码。

// Loop through each subarray:
foreach ($parent as $id => $cat) {

    // Display the item:
    echo '<li><a href="http:' . $url . '" title="">' . $cat . '</a>';

这是完整的代码。

<?php
require_once ('./mysqli_connect.php'); // Connect to the db.

// Receives one argument: an array.
function make_list ($parent) {

    // Need the main $link array:
    global $link;

    // Start an ordered list:
    echo '<ol>';

    // Loop through each subarray:
    foreach ($parent as $id => $cat) {

        // Display the item:
        echo '<li><a href="http://' . $url . '" title="">' . $cat . '</a>';

        // Check for sublink:
        if (isset($link[$id])) { 

            // Call this function:
            make_list($link[$id]);

        }

        // Complete the list item:
        echo '</li>';

    } // End of FOREACH loop.

    // Close the ordered list:
    echo '</ol>';

} // End of make_list() function.


// Connect to the database:
    $mysqli = new mysqli("localhost", "root", "", "sitename");
    $dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC");
if (!$dbc) {
    // There was an error...do something about it here...
    print mysqli_error();
} 


// Initialize the storage array:
$link = array();

while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) {

    // Add to the array:
    $link[$parent_id][$id] =  $category;

}

make_list($link[0]);


mysqli_close($mysqli); // close the connection

?>

2 个答案:

答案 0 :(得分:3)

$ url甚至不在图片中......看起来你正在迭代一个与MySQL结果分开的数组。你需要更像的东西:

foreach ($res as $row) {
    echo '<li><a href="http:' . $row['url'] . '" title="">' . $row['cat'] . '</a>';
}

希望这有帮助。

编辑:

首先,$ url需要与列表中的其他变量一起分配() - 因为您在查询中执行SELECT *,您可能需要指定列,以便在分配中顺序正确。< / p>

然后,无法使用您正在使用的数组结构包含另一个变量...

$link[$parent_id][$id] =  $category;

必须是这样的:

$link[$parent_id][$id] =  array('category' => $category, 'url' => $url);

然后,迭代数组需要更改为:

foreach ($parent as $id => $ary) {

    // Display the item:
    echo '<li><a href="http:' . $ary['url'] . '" title="">' . $ary['category'] . '</a>';

}

答案 1 :(得分:1)

根据您提供的代码,您不会从$ parent声明$ url。您是否有机会提供存储在$ parent中的内容?


首先是第一件事!

您需要从mysqli_fetch_array调用中获取类似于此的URL(我假设url是表中的列名)

while ($row = mysqli_fetch_array($dbc, MYSQLI_NUM)) {
    $id = $row['id'];
    $parent_id = $row['parent_id'];
    $cat = $row['category'];
    $url = $row['url'];

    // Add to the array:
    $link[$parent_id][$id] = array('cat' => $cat, 'url' => $url);
}

然后改变你的foreach循环以提取适当的类别和网址

foreach ($parent as $id => $category_array) {

 // Display the item:
 echo '<li><a href="http://' . $category_array['url'] . '" title="">' . $category_array['cat'] . '</a>';