Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [php] - Alberi binari e ordinamento

    ciao a tutti
    Piccolo grande problema con gli alberi binari

    mi trovo in una situazione di avere un array di questo tipo

    Codice PHP:
    Array
    (
        [
    1] => Array
            (
                [
    id] => 1
                
    [name] => Nodo1
                
    [parent] => 0
                
    [attivo] => 1
            
    )

        [
    2] => Array
            (
                [
    id] => 2
                
    [name] => Nodo2
                
    [parent] => 0
                
    [attivo] => 1
            
    )

        [
    3] => Array
            (
                [
    id] => 3
                
    [name] => Nodo3 
                
    [parent] => 2
                
    [attivo] => 1
            
    )

        [
    4] => Array
            (
                [
    id] => 4
                
    [name] => Nodo4
                
    [parent] => 3
                
    [attivo] => 1
            
    )


    e vorrei creare un albero binario così

    codice:
     |_ Nodo1
     |_ Nodo2 
        |_ Nodo3 
            |_ Nodo4
    partendo dal presupposto che le strutture gerarchiche su db non ho intenzione di usarle ma voglio farlo con la ricorsività per ovvi motivi

    io sono arrivato qui ma non funzica

    Codice PHP:
        function BuildList($list,$parent 999999)
        {
            
    // Reset delle variabili
            
    reset($list);
            unset(
    $temp_array);
            unset(
    $array);
                    
            foreach(
    $list as $k => $v)
            {          
                if (( 
    $v['parent'] == || $v['id'] == $parent ) ) 
                {
                        
    $temp_array[$v['id']] = $v;  // Prelevo i nodi genitori               
                    
    }  
                    elseif(
    $v['parent'] !=0  
                    {
                  
    $array[$v['id']] = $v;  // Prelevo i nodi figli
                    
    }
            
            } 
    // End-foreach
                    
            
    echo '<pre>'print_r($temp_array); echo '</pre>'//DEBUG
            
    echo '<pre>'info($array); echo '</pre>';//DEBUG
                      
            
    if (isset($temp_array)) 
            {
                foreach(
    $temp_array as $k => $v)
                {               
                   
    $array[$k] = BuildList($array,$k);
                }      
            }
            
            return (isset(
    $array) ? $array false);
            
        } 
    // End-Method 
    qualche anima pia che sa dirmi cosa sbaglio e come posso sistemare il problema dei nodi del figlio ??
    grazie in anticipo a tutti
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  2. #2
    Potresti postare un var_export() dell'array in modo da non doverlo ricostruire a mano?

  3. #3
    Originariamente inviato da filippo.toso
    Potresti postare un var_export() dell'array in modo da non doverlo ricostruire a mano?
    Codice PHP:
    $array = array ( => array ( 'id' => '1''name' => 'Nodo1''parent' => '0''attivo' => '1'), 
                          
    => array ( 'id' => '2''name' => 'Nodo2''parent' => '0''attivo' => '1'), 
                          
    => array ( 'id' => '3''name' => 'Nodo3''parent' => '2''attivo' => '1'), 
                          
    => array ( 'id' => '4''name' => 'Nodo4''parent' => '3''attivo' => '1')); 
    Eccolo grazie
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  4. #4
    Studiati questo codice:

    Codice PHP:
    <pre>
    <?php 

    $array 
    = array ( => array ( 'id' => '1''name' => 'Nodo1''parent' => '0''attivo' => '1'),
                          
    => array ( 'id' => '2''name' => 'Nodo2''parent' => '0''attivo' => '1'),
                          
    => array ( 'id' => '3''name' => 'Nodo3''parent' => '2''attivo' => '1'),
                          
    => array ( 'id' => '4''name' => 'Nodo4''parent' => '3''attivo' => '1'));
                          
    function 
    tree($nodes$level 0) {
        foreach (
    $nodes as $node) {
            
    $pre str_repeat('   '$level) . '|_ ';
            print(
    "{$pre}{$node['name']}\r\n");
            
    tree($node['childs'], $level 1);
        }
    }

    $items = array();
    foreach (
    $array as $node) {
        
    $items[$node['id']] = $node;
        
    $items[$node['id']]['childs'] = array();
    }
    $items[0] = array('name' => 'root''parent' => -1'childs' => array());

    foreach (
    $items as &$item) {
        
    $items[$item['parent']]['childs'][] = & $item;
    }

    tree($items[0]['childs']);

    ?>
    </pre>

  5. #5
    Originariamente inviato da filippo.toso
    Studiati questo codice:

    Codice PHP:
    <pre>
    <?php 

    $array 
    = array ( => array ( 'id' => '1''name' => 'Nodo1''parent' => '0''attivo' => '1'),
                          
    => array ( 'id' => '2''name' => 'Nodo2''parent' => '0''attivo' => '1'),
                          
    => array ( 'id' => '3''name' => 'Nodo3''parent' => '2''attivo' => '1'),
                          
    => array ( 'id' => '4''name' => 'Nodo4''parent' => '3''attivo' => '1'));
                          
    function 
    tree($nodes$level 0) {
        foreach (
    $nodes as $node) {
            
    $pre str_repeat('   '$level) . '|_ ';
            print(
    "{$pre}{$node['name']}\r\n");
            
    tree($node['childs'], $level 1);
        }
    }

    $items = array();
    foreach (
    $array as $node) {
        
    $items[$node['id']] = $node;
        
    $items[$node['id']]['childs'] = array();
    }
    $items[0] = array('name' => 'root''parent' => -1'childs' => array());

    foreach (
    $items as &$item) {
        
    $items[$item['parent']]['childs'][] = & $item;
    }

    tree($items[0]['childs']);

    ?>
    </pre>
    carino
    e molto semplice
    sono rimasto sconvolto da questo però

    Codice PHP:
    foreach ($items as &$item) {
        
    $items[$item['parent']]['childs'][] = & $item;

    grazie infinite filippo
    avanzi un favore
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2000
    residenza
    Edinburgh
    Messaggi
    401
    Non so se ti possa interessare, comunque io ho implementato questa soluzione (con qualche cambiamento minore) and it rocks! (guarda da metà pagina in poi quando parla del modello nested set)

    http://dev.mysql.com/tech-resources/...ical-data.html

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.