Recursive function help  Bottom


  • Hello old friends! I am totally stumped on this... :(

    Required: traversal of muliti-dimensional array where dimensions are variable - this is a node type affair. Example input array as follows:

    Code

    array
    (
        [310] => array
            (
                [297] => array
                    (
                    )

                [291] => array
                    (
                        [315] => array
                            (
                            )

                        [316] => array
                            (
                            )

                    )

                [308] => array
                    (
                        [317] => array
                            (
                            )

                        [318] => array
                            (
                            )

                        [319] => array
                            (
                            )

                    )

                [309] => array
                    (
                    )

                [298] => array
                    (
                    )

                [296] => array
                    (
                    )

            )

    )


    Remember the above is completely variable in regards to dimension!

    Required output (based on the above):

    Code

    array
    (
        [0]  => array
            (
                [id]        => 310
                [path]      => >310>
                [positon]   => 1
            )
        [1] => array
            (
                [id]        => 297
                [path]      => >310>297>
                [positon]   => 1
            )
        [2] => array
            (
                [id]        => 291
                [path]      => >310>291>
                [positon]   => 2
            )
        [3] => array
            (
                [id]        => 315
                [path]      => >310>291>315>
                [positon]   => 1
            )
        [4] => array
            (
                [id]        => 316
                [path]      => >310>291>316>
                [positon]   => 2
            )
        [5] => array
            (
                [id]        => 308
                [path]      => >310>308>
                [positon]   => 3
            )
        [6] => array
            (
                [id]        => 317
                [path]      => >310>308>317>
                [positon]   => 1
            )
        [7] => array
            (
                [id]        => 318
                [path]      => >310>308>318>
                [positon]   => 2
            )
        [8] => array
            (
                [id]        => 319
                [path]      => >310>308>319>
                [positon]   => 3
            )
        [9] => array
            (
                [id]        => 309
                [path]      => >310>300>
                [positon]   => 4
            )
        [10] => array
            (
                [id]        => 298
                [path]      => >310>298>
                [positon]   => 5
            )
        [11] => array
            (
                [id]        => 296
                [path]      => >310>296>
                [positon]   => 6
            )

    )


    The first dimension order is not so important as I will just be looping thru and using the id, path and position.

    id - this is the key of each dimension of the array, always unique
    path - MUST be in this format - shows the path of parents AND id (look at the input array - see how each parent array key creates this.
    position - this shows the position of the array in regards to other siblings in the same parent array - this will be always in the same order as that found in the input array.

    Thanks for any advice you can give...



    -Webvida

    --
    -Lobos
    Professional PHP Framework Services: Concept, Development and Deployment
  • A recursive function that i don't know when stop...
    in this case, can be an empty check, but sure you'll need to define a criteria depending of your leaf info (!isset($value[field]){check again})...


    This function works in my head: icon_razz


    Code

    function getinfo($matrix, $path) {
      $position = 1;
      $info = array();
      foreach ($matrix as $key => $value) {
        $info[] = array('id' => $key, 'path' => "$path$key>", 'position' => $position);
        if(!empty($value)) {
          $internalinfo = getinfo($value, "$path$key>");
          array_push($info, $internalinfo);
        }
        $position++;
      }
      return $info;
    }

    $result = getinfo($yourmultidimensionalmatrix, '>');


    --
    - Mateo T. -
    Mis principios... son mis fines
  • Thanks mate, this looks like it will work. The only thing is the position, this is the position of siblings under a parent and not the position in regards to the array as a whole. But anyways you have provided me enough to start with and for this I am grateful :)

    -Lobos

    --
    -Lobos
    Professional PHP Framework Services: Concept, Development and Deployment

This list is based on users active over the last 60 minutes.