这是来自Larry Ullman的“PHP高级和面向对象编程:Visual QuickPro指南(第3版)”的示例脚本。
我的问题是如何根据每个项目的嵌套方式动态添加html类。例如,我想在所有父任务中添加一个类任务,为所有子任务添加一个类子任务,为子任务的所有子任务添加一个子子任务,并且无论项目的嵌套方式如何,我都想动态。我对处理这样一个问题的任何方法持开放态度,这个特定的例子只是一个参考,因为我知道可能有更好的方法来解决这个问题,包括更改存储在数组中的信息。我想知道处理在ol中打印多维数组的一般方法,并添加一个动态指示嵌套每个项目的类,以便我可以独立地设置它们的样式。我真的很感激任何帮助,我每天都在学习。
<?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>
答案 0 :(得分:0)
您可以使用递归函数:
$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>