我正在尝试从数据库数据中呈现FAQ列表。数据库结果集包含一个数组列表(顶级类别),每个类别包含一组Q +以下称为faqs
或另一组类别,后面称为children
。
我想迭代结果集,并且,当找到'children'元素时,为找到的类别呈现以下外部标记。
<div>
<section>category title</section>
<!-- In case this category has children, render this block here again
to show the sub-categories list under this category -->
<!-- In case this category has no children, but faqs, render the topics -->
</div>
在http://pastebin.com/czckiNUx我粘贴了迭代数据集的样子。
我从几个嵌套的foreach循环开始,发现嵌套级别可能是无穷无尽的(因为理论上可以创建嵌套在(子)类别下所需的子类别)并立即想知道如何捕获这种情况并提出这个理论上未知的嵌套水平。
我浏览了这个平台并阅读了几个主题。 this one并尝试调整实现,但坚持理解这些迭代器的使用。我对迭代器的体验几乎为零,当我浏览the PHP manual时,我感到有些迷茫,因为我不知道从哪里开始,或者更好地如何将这些可能性结合起来以实现工作。
虽然我尝试调整linked topic中的解决方案,但我发现$iterator
忽略了所有children
- 和faqs
- 这些元素本身就是数组并且不明白为什么。它仅输出字符串和数字等简单类型数据。我不明白为什么并且想知道我必须如何正确地实现它。
需要评估每个迭代元素,并检查它是否属于类别标题,类别描述,类别ID或子类别/常见问题集合。
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
foreach ($iterator as $key => $value)
{
if ($key == 'children')
{
// sub-categories found, find the faqs-elements and render the markup
// this element might contain further sub-categories (children-elements)
}
elseif ($key == 'faqs')
{
// collection of Q+As found ... iterate them and render the markup
// the iteration can't go any deeper
}
}
我如何正确实施?
答案 0 :(得分:0)
这是一个将遍历您的数据结构并打印出信息的函数;你可以按照自己的意愿调整它:
function iterate(&$array_of_aas)
{ // we have an array of associative arrays.
// $x is the associative array
foreach ($array_of_aas as $x)
{ echo "Found level " . $x['level'] . " with ID " . $x['id'] . "\n";
if(isset($x['children'])) {
// found some sub-categories! Iterate over them.
iterate($x['children']);
}
elseif (isset($x['faqs'])) {
echo "Found some FAQS!\n";
// collection of Q+As found ... iterate them and render the markup
// the iteration can't go any deeper
foreach ($x['faqs'] as $faq) {
echo 'ID: ' . $faq['id'] . ", category: " . $faq['catid'] . "\n" . $faq['title'] . "; " . $faq['description'] . "\n";
}
}
}
}