Page 1 of 1

assign left right values to array

Posted: Fri Oct 23, 2009 9:27 am
by mcgrailm
Hello all,

I have a multidimensional array structured as a tree and i would like to know how I can assign left and right values for nested set model

here is the array

Code: Select all

 
Array
(
    [ul] => Array
        (
            [0] => Array
                (
                    [id] => item_1
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => item_21
                                )
 
                            [1] => Array
                                (
                                    [id] => item_30
                                )
 
                            [2] => Array
                                (
                                    [id] => item_42
                                )
 
                            [3] => Array
                                (
                                    [id] => item_43
                                )
 
                            [4] => Array
                                (
                                    [id] => item_41
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [id] => item_94
                                                )
 
                                        )
 
                                )
 
                        )
 
                )
 
            [1] => Array
                (
                    [id] => item_2
                )
 
            [2] => Array
                (
                    [id] => item_3
                )
 
            [3] => Array
                (
                    [id] => item_4
                )
 
            [4] => Array
                (
                    [id] => item_5
                )
 
            [5] => Array
                (
                    [id] => item_26
                )
 
            [6] => Array
                (
                    [id] => item_6
                )
 
            [7] => Array
                (
                    [id] => item_8
                )
 
            [8] => Array
                (
                    [id] => item_9
                )
 
            [9] => Array
                (
                    [id] => item_10
                )
 
            [10] => Array
                (
                    [id] => item_11
                )
 
            [11] => Array
                (
                    [id] => item_12
                )
 
            [12] => Array
                (
                    [id] => item_15
                )
 
            [13] => Array
                (
                    [id] => item_16
                )
 
            [14] => Array
                (
                    [id] => item_17
                )
 
            [15] => Array
                (
                    [id] => item_18
                )
 
            [16] => Array
                (
                    [id] => item_19
                )
 
            [17] => Array
                (
                    [id] => item_20
                )
 
            [18] => Array
                (
                    [id] => item_22
                )
 
            [19] => Array
                (
                    [id] => item_23
                )
 
            [20] => Array
                (
                    [id] => item_24
                )
 
            [21] => Array
                (
                    [id] => item_25
                )
 
            [22] => Array
                (
                    [id] => item_27
                )
 
            [23] => Array
                (
                    [id] => item_35
                )
 
            [24] => Array
                (
                    [id] => item_36
                )
 
            [25] => Array
                (
                    [id] => item_39
                )
 
            [26] => Array
                (
                    [id] => item_40
                )
 
            [27] => Array
                (
                    [id] => item_44
                )
 
            [28] => Array
                (
                    [id] => item_45
                )
 
            [29] => Array
                (
                    [id] => item_47
                )
 
            [30] => Array
                (
                    [id] => item_48
                )
 
            [31] => Array
                (
                    [id] => item_49
                )
 
            [32] => Array
                (
                    [id] => item_50
                )
 
            [33] => Array
                (
                    [id] => item_51
                )
 
            [34] => Array
                (
                    [id] => item_56
                )
 
            [35] => Array
                (
                    [id] => item_57
                )
 
            [36] => Array
                (
                    [id] => item_58
                )
 
            [37] => Array
                (
                    [id] => item_59
                )
 
            [38] => Array
                (
                    [id] => item_60
                )
 
            [39] => Array
                (
                    [id] => item_61
                )
 
            [40] => Array
                (
                    [id] => item_62
                )
 
            [41] => Array
                (
                    [id] => item_63
                )
 
            [42] => Array
                (
                    [id] => item_64
                )
 
            [43] => Array
                (
                    [id] => item_65
                )
 
            [44] => Array
                (
                    [id] => item_66
                )
 
            [45] => Array
                (
                    [id] => item_67
                )
 
            [46] => Array
                (
                    [id] => item_68
                )
 
            [47] => Array
                (
                    [id] => item_70
                )
 
            [48] => Array
                (
                    [id] => item_71
                )
 
            [49] => Array
                (
                    [id] => item_72
                )
 
            [50] => Array
                (
                    [id] => item_73
                )
 
            [51] => Array
                (
                    [id] => item_74
                )
 
            [52] => Array
                (
                    [id] => item_75
                )
 
            [53] => Array
                (
                    [id] => item_76
                )
 
            [54] => Array
                (
                    [id] => item_78
                )
 
            [55] => Array
                (
                    [id] => item_79
                )
 
            [56] => Array
                (
                    [id] => item_80
                )
 
            [57] => Array
                (
                    [id] => item_81
                )
 
            [58] => Array
                (
                    [id] => item_82
                )
 
            [59] => Array
                (
                    [id] => item_83
                )
 
            [60] => Array
                (
                    [id] => item_84
                )
 
            [61] => Array
                (
                    [id] => item_85
                )
 
            [62] => Array
                (
                    [id] => item_86
                )
 
            [63] => Array
                (
                    [id] => item_87
                )
 
            [64] => Array
                (
                    [id] => item_88
                )
 
            [65] => Array
                (
                    [id] => item_89
                )
 
            [66] => Array
                (
                    [id] => item_90
                )
 
            [67] => Array
                (
                    [id] => item_91
                )
 
            [68] => Array
                (
                    [id] => item_92
                )
 
            [69] => Array
                (
                    [id] => item_93
                )
 
            [70] => Array
                (
                    [id] => item_13
                )
 
            [71] => Array
                (
                    [id] => item_7
                )
 
            [72] => Array
                (
                    [id] => item_95
                )
 
            [73] => Array
                (
                    [id] => item_96
                )
 
            [74] => Array
                (
                    [id] => item_97
                )
 
            [75] => Array
                (
                    [id] => item_98
                )
 
            [76] => Array
                (
                    [id] => item_69
                )
 
        )
 
)
 
I need each node to have a left and right value so when I update my tree table it will put all the leaves and branches in the right place

any help would be greatly appreciated

thanks
Mike

Re: assign left right values to array

Posted: Fri Oct 23, 2009 7:42 pm
by requinix
Take a look at this.

Code: Select all

<?php
 
function nestedset($array, $start = 1) {
    $nested = array();
    foreach ($array as $key => $data) {
        if (is_array($data)) { // has children
            $child = nestedset($data, $start + 1); // get the children
            $nested = array_merge($nested, $child); // add to our array
            $last = end($child); // the last item has the furthest 'right' value
            $nested[$key] = array(
                "left" => $start, // $start is fixed
                "right" => $last["right"] + 1 // furthest, plus one
            );
            $start = $last["right"] + 2; // next one starts at the furthest plus two
        } else { // has data
            $nested[$key] = array(
                "left" => $start, // $start is fixed
                "right" => $start + 1 // no children means left+1 = right
            );
            $start = $start + 2; // next one starts at right+1
        }
    }
    return $nested;
}
 
$array = array(
    "first" => array(       // 1, 12
        "second" => array(  // 2, 7
            "third" => 3,   // 3, 4
            "fourth" => 4   // 5, 6
        ),
        "fifth" => 5,       // 8, 9
        "sixth" => 6,       // 10, 11
    ),
    "seventh" => array(     // 13, 22
        "eighth" => 8,      // 14, 15
        "ninth" => array(   // 16, 19
            "tenth" => 10   // 17, 18
        ),
        "eleventh" => 11    // 20, 21
    ),
    "twelveth" => 12        // 23, 24
);
 
print_r(nestedset($array));