如何重新排序PHP中的嵌套元素?

时间:2013-12-01 16:32:04

标签: php mysql codeigniter-2 nested-lists

我有一个嵌套项目(类别)列表,我想重新组织,通过排序和嵌套深度。我会试着解释一下:

enter image description here

当我通过单击蓝色按钮保存提交带有jQuery的表单时,它会处理models/categories_model.php内的一个函数:

public function organize($items){
    if( count($items)){
        foreach($items as $order => $item){
            if($item['item_id'] != ''){
                echo '<pre>'.$order.'</pre>';
                $data = array(
                    'pid'       => (int) $item['parent_id'],
                    'ordering'  => $order
                );
                $this->db
                    ->set($data)
                    ->where($this->_primary_key, $item['item_id'])
                    ->update($this->_table_name);
            }
        }
    }
}

它保存了这样的列表:

1
    2
    3
4
    5
    6
7
8
    9
    10

而不是像这样保存它:

1
    1
    2
    3
    4
2
    1
    2
3
    1
    2
        1
        2
        3
    3

不是逐个获取$order值,而是应该将帐户作为嵌套项并从1开始计算$order,而不是继续计算它的父项。

所以当我保存它时,我希望它们能像这样订购,但不知道怎么做:

enter image description here

有人知道如何使用嵌套项目吗?

1 个答案:

答案 0 :(得分:1)

如果方法以正确的顺序接收项目,这应该有效:

public function organize($items)
{
    if (!empty($items)) {
        $orderByPid = array();
        foreach ($items as $item) {
            if($item['item_id'] != '') {
                if (!isset($orderByPid[$item['parent_id']])) {
                    $orderByPid[$item['parent_id']] = 0;
                }
                $data = array(
                    'pid'       => (int) $item['parent_id'],
                    'ordering'  => ++$orderByPid[$item['parent_id']]
                );
                $this->db
                    ->set($data)
                    ->where($this->_primary_key, $item['item_id'])
                    ->update($this->_table_name);
            }
        }
    }
}