0

重複の可能性:
ネストされた配列。3番目のレベルが消えています

私はここで、phpを使用してmoodleデータベースデータをulli形式で表示することに問題があります。コースではなく、コースのすべてのカテゴリをulliとして適切なネストされた形式で表示したいと思います。私が取り組んでいるテーブルはmdl_course_categoriesです。phpスクリプトを実行するたびに、リストを動的に更新する必要があります。コードは次のようになります。

<?php
$con = mysql_connect("localhost","root","");
if (!$con) {
die('Could not connect: ' . mysql_error());
}

mysql_select_db("moodle19", $con);
$result = mysql_query("SELECT name AS COURSE_NAME,parent FROM mdl_course_categories");

if (isset($result)!=1) {
$message  = 'Invalid query: ' . mysql_error() . "\n";
}
echo "<p> The courses taught are: </p>";

while ($row = mysql_fetch_array($result)) {
$b=$row['COURSE_NAME'];
$c=$row['parent'];

//      $a=mysql_query("Select id from mdl_course_categories");
//      $condition=mysql_query("SELECT name AS COURSE_NAME FROM mdl_course_categories WHERE parent='0'");

    if ($c==0) {
    echo "<ul>
    <li>" .$b. "</li>
    </ul>";
    }

    else {
        echo "<ul>
            <li>" .$b. "</li>
            </ul>";
    $result1 = mysql_query("SELECT name AS COURSE_NAME FROM mdl_course_categories WHERE depth!='1'");
    while ($row1 = mysql_fetch_array($result1)) {

        $b1=$row1['COURSE_NAME'];
        echo "<ul>
            <li>" .$b1. "</li>
            </ul>";
        }
    }   
}
?>

何が悪いのか理解するのに混乱がありますか?

4

1 に答える 1

0

これはあなたに役立つと思います-

$query_catetories = mysql_query('SELECT cc.id, cc.parent, cc.name FROM mdl_course_categories cc ');
$categories = mysql_fetch_all($query_catetories);

$tmp_categories = array();

foreach ($categories AS $row) {

    $row['id'] = (int) $row['id'];
    $row['parent'] = (int) $row['parent'];
    if (!$tmp_categories[$row['parent']])
        $tmp_categories[$row['parent']] = array();
    $tmp_categories[$row['parent']][] = $row;
}

$course_catetories = buildNode($tmp_categories);

echo '<ul>';
foreach ($course_catetories as $course_catetory) {
    print_category_child($course_catetory);
}
echo '</ul>';

function print_category_child($category) {
    echo '<li>' . $category['name'];
    if (array_key_exists('children', $category)) {
        echo '<ul>';
        foreach ($category['children'] as $child) {
            print_category_child($child);
        }
        echo '</ul>';
    }
    echo '</li>';
}

function buildNode($inputArray, $parent = 0) {
    $return = array();
    foreach ($inputArray[$parent] AS $key => $row) {
        if (@$inputArray[$row['id']]) {
            $row['children'] = buildNode($inputArray, $row['id']);
        }
        $return[] = $row;
    }
    return $return;
}

function mysql_fetch_all($result) {
    $all = array();
    while ($all[] = mysql_fetch_assoc($result)) {

    }
    return array_filter($all);
}

ありがとう

于 2013-01-14T11:12:53.403 に答える