【问题标题】:Yii Framework | Nested arrays in same tableYii 框架 |同一张表中的嵌套数组
【发布时间】:2014-06-23 18:53:48
【问题描述】:

使用 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 经典的嵌套数组数据(数组内的数组)。 数组(1,1){ 数组(2,1){ 数组(4,2) .... } }

问题是 Yii。我没有找到正确的方法如何使用正确的 CActiveRecord 将数据作为嵌套数组拾取。

生成嵌套数组结果的最佳方法是什么?一个主要目标是轻松转发以呈现视图,这样我就不会分离出太多的功能并在模块或模型之外调用许多模型。

一个好的功能就是得到一个结果。

【问题讨论】:

标签: php arrays yii frameworks


【解决方案1】:

使用此解决: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;
}

然后调用 put all $arrays data into buildTree 函数来重建嵌套数组数据。

$tree = buildTree($arrays);

现在您的$tree 是嵌套数组数据。

注意:功能没有深度,但您可以使用以下示例添加方便的方法:Create nested list from Multidimensional Array

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多