Yii框架|同一个表中的嵌套数组

时间:2014-06-23 18:53:48

标签: php arrays yii frameworks

使用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将数据作为嵌套数组获取。

制作嵌套数组结果的最佳方法是什么?一个主要目标是轻松地呈现视图,因此我不会将太多功能分开,并在模块或模型之外调用许多模型。

好的是获得结果的一个功能。

1 个答案:

答案 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