다차원 배열을 기반으로 동적으로 인쇄 된 ol에 클래스를 동적으로 추가하는 방법은 무엇입니까?

LucasCoder

이것은 Larry Ullman의“PHP Advanced and Object-Oriented Programming : Visual QuickPro Guide (3rd Edition)”의 예제 스크립트입니다.

내가 가진 질문은 각 항목이 중첩되는 방식에 따라 html 클래스를 동적으로 추가하는 방법입니다. 예를 들어 모든 상위 작업에 클래스 작업을 추가하고, 모든 하위 작업에 클래스 하위 작업을 추가하고, 하위 작업의 모든 하위 작업에 클래스 하위 작업을 추가하고 싶습니다. 항목이 얼마나 중첩되어 있는지에 관계없이 동적으로 추가하고 싶습니다. 나는 그러한 문제를 다루는 모든 접근 방식에 열려 있으며 배열에 저장되는 정보에 대한 변경을 포함하여 이에 대해 훨씬 더 나은 방법이있을 수 있음을 이해하기 때문에이 특정 예제는 참조 일뿐입니다. ol에서 다차원 배열을 인쇄하고 각 항목이 중첩되는 방식을 동적으로 나타내는 클래스를 추가하는 일반적인 접근 방식을 알고 싶습니다. 그러면 개별적으로 스타일을 지정할 수 있습니다. 어떤 도움이라도 정말 감사합니다. 저는 여전히 매일 배우고 있습니다.

FullScript

curarrayandoutput

    <?php
        //Enter your code here, enjoy!

$tasks = array(
    0 => array(
        1 => 'Task 1',
        2 => 'Task 2',
        3 => 'Task 3',
        8 => 'Task 4',
    ),
    2 => array(
        4 => 'Subtask 1',
        5 => 'Subtask 2',
        6 => 'Subtask 3',
    ),
    5 => array(
        7 => 'Subsubtask 1',
    ),
);

echo '<ol>';
printTasksRecursively($tasks, $tasks[0]);
echo '</ol>';

function printTasksRecursively($tasks, $tasksToBePrinted, $level = 0)
{

        echo '<ol class="';
        if($level > 0) {
            echo str_repeat('sub', $level);
            }
        echo 'task">';

       foreach ($tasksToBePrinted as $id => $taskName) {
         echo '<li>' . $taskName . '</li>';

       if (isset($tasks[$id])) {
            printTasksRecursively($tasks, $tasks[$id], $level + 1);
        }

        }

       echo '</ol>';


}





 <ol><ol class="task">
<li>Task 1</li>
<li>Task 2</li>
<ol class="subtask">
<li>Subtask 1</li>
<li>Subtask 2</li>
<ol class="subsubtask">
<li>Subsubtask 1</li>
</ol>
<li>Subtask 3</li>
</ol>
<li>Task 3</li>
<li>Task 4</li>
</ol></ol>
미하이 마테이

재귀 함수를 사용할 수 있습니다.

$tasks = array(
    0 => array(
        1 => 'Task 1',
        2 => 'Task 2',
        3 => 'Task 3',
        8 => 'Task 4',
    ),
    2 => array(
        4 => 'Subtask 1',
        5 => 'Subtask 2',
        6 => 'Subtask 3',
    ),
    5 => array(
        7 => 'Subsubtask 1',
    ),
);

printTasksRecursively($tasks, $tasks[0]);

function printTasksRecursively($tasks, $tasksToBePrinted, $level = 0)
{
    echo '<ol' . ($level > 0 ? ' class="' . str_repeat('sub', $level) . 'task"' : '') . '>';

    foreach ($tasksToBePrinted as $id => $taskName) {
        echo "<li>$taskName</li>";

        if (isset($tasks[$id])) {
            printTasksRecursively($tasks, $tasks[$id], $level + 1);
        }
    }
    echo '</ol>';
}

출력은 다음과 같습니다.

<ol>
    <li>Task 1</li>
    <li>Task 2</li>
    <ol class="subtask">
        <li>Subtask 1</li>
        <li>Subtask 2</li>
        <ol class="subsubtask">
            <li>Subsubtask 1</li>
        </ol>
        <li>Subtask 3</li>
    </ol>
    <li>Task 3</li>
    <li>Task 4</li>
 </ol>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관