使用CActiveRecord,我的表格如下:
列parent_id与id有很多关系,它可以正常工作。
id | parent_id
---+----------
1 1 <- top
2 1 <- means parent_id with 1 has parent with id=1
3 1
4 2 <- parent for is id=2
5 2
6 2 and so many nested levels....
目标是如何正确地嵌套为PHP经典嵌套数组数据(数组中的数组)。 array(1,1){ 数组(2,1){ 数组(4,2).... } }
问题是Yii。我没有找到正确的方法如何使用正确的CActiveRecord将数据作为嵌套数组获取。
制作嵌套数组结果的最佳方法是什么?一个主要目标是轻松地呈现视图,因此我不会将太多功能分开,并在模块或模型之外调用许多模型。
好的是获得结果的一个功能。
答案 0 :(得分:0)
使用此解决:Recursive function to generate multidimensional array from database result
您需要从模型中获取数据作为数组:
$somemodel = MyModel::model()->findAll();
然后将所有数据放入数组,而不是Yii对象模型或所需内容:
foreach ($somemodel as $k => $v)
{
$arrays[$k] = array('id' => $v->id, 'parent_id' => $v->parent_id, 'somedata' => 'Your data');
}
然后调用一个函数:
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
然后调用将所有$arrays
数据放入buildTree函数以重建嵌套数组数据。
$tree = buildTree($arrays);
现在您的$tree
是嵌套数组数据。
注意:功能没有深度,但是你可以像这个样本一样添加使用:Create nested list from Multidimensional Array