Dynamic treeview modified

 If the root user doesn't have a `position` value (i.e., no `'left'` or `'right'` position assigned), you'll need to handle that separately in the logic. For the root user (whose `placement` is `NULL` or `''`), the `position` condition will not be satisfied because the root node does not have a position.



### Solution:

1. **Identify the Root User**: The root user is the one whose `placement` is `NULL` or an empty string (`''`).

2. **Skip the `position` check for the Root User**: For the root user, you don't need to check for `position`. Instead, just place them as the root, and then handle their children by checking their positions (`left` or `right`).


### Updated Code:


```php

function buildTree($users, $parentId = null) {

    $branch = array('left' => array(), 'right' => array());


    foreach ($users as $user) {

        // Root node check: If the placement is NULL or blank, and no position is required for root

        if ($parentId === null && $user['placement'] == '') {

            // This is the root user, no left or right check

            $branch = array(

                'userid' => $user['userid'],

                'children' => buildTree($users, $user['userid']) // Recursively build the tree for children

            );

        }

        // For non-root users, check placement and position (left or right)

        elseif ($user['placement'] == $parentId) {

            if ($user['position'] == 'left') {

                $branch['left'][] = array(

                    'userid' => $user['userid'],

                    'children' => buildTree($users, $user['userid']) // Recursively call for left children

                );

            } elseif ($user['position'] == 'right') {

                $branch['right'][] = array(

                    'userid' => $user['userid'],

                    'children' => buildTree($users, $user['userid']) // Recursively call for right children

                );

            }

        }

    }


    return $branch;

}

```


### Key Changes:


1. **Root Node Handling**:

   If the `parentId` is `null` and the `placement` is empty (`''`), then this is the root node. It will not have a `position`, so you handle it separately.

   

   ```php

   if ($parentId === null && $user['placement'] == '') {

       $branch = array(

           'userid' => $user['userid'],

           'children' => buildTree($users, $user['userid']) // Continue building tree for children

       );

   }

   ```


2. **Non-root Nodes**:

   For users with a `placement` (i.e., non-root users), you check their `position` (`left` or `right`) and place them accordingly in the tree.


   ```php

   elseif ($user['placement'] == $parentId) {

       if ($user['position'] == 'left') {

           $branch['left'][] = array(

               'userid' => $user['userid'],

               'children' => buildTree($users, $user['userid']) // Recursively build for left children

           );

       } elseif ($user['position'] == 'right') {

           $branch['right'][] = array(

               'userid' => $user['userid'],

               'children' => buildTree($users, $user['userid']) // Recursively build for right children

           );

       }

   }

   ```


### Display Function:

Once the tree is built, you can display it as follows:


```php

function displayTree($tree) {

    if (empty($tree)) {

        return;

    }


    // Display root node

    echo '<div class="parent-node">' . $tree['userid'] . '</div>';


    // Display left and right children

    echo '<div class="tree-container">';

    

    // Left side

    if (!empty($tree['children']['left'])) {

        echo '<div class="left-branch">';

        echo '<ul>';

        foreach ($tree['children']['left'] as $node) {

            echo '<li>' . $node['userid'];

            displayTree($node['children']); // Recursively display children

            echo '</li>';

        }

        echo '</ul>';

        echo '</div>';

    }


    // Right side

    if (!empty($tree['children']['right'])) {

        echo '<div class="right-branch">';

        echo '<ul>';

        foreach ($tree['children']['right'] as $node) {

            echo '<li>' . $node['userid'];

            displayTree($node['children']); // Recursively display children

            echo '</li>';

        }

        echo '</ul>';

        echo '</div>';

    }


    echo '</div>';

}

```


### How This Works:

- The root user will not have a `position`, so the function handles this separately when `parentId` is `null` and `placement` is `''`.

- For all other users, the function checks whether they are in the `left` or `right` position of their parent, and the tree is built accordingly.


### Example:


If you have the following structure in your database:


| userid | placement | position |

|--------|-----------|----------|

| rp1 | | |

| rp2 | rp1 | left |

| rp3 | rp1 | right |

| rp4 | rp2 | left |

| rp5 | rp3 | right |


- `rp1` is the root, as its `placement` is blank.

- `rp2` is in the left position of `rp1`.

- `rp3` is in the right position of `rp1`.

- `rp4` is in the left position of `rp2`.

- `rp5` is in the right position of `rp3`.


The tree would display with `rp1` as the root, with `rp2` and `rp3` as its left and right children, respectively, and so on.


Let me know if this resolves your issue!

Previous
Next Post »