Visualizzazione risultati 1 fino 8 di 8

Discussione: Valorizzare array per fare un listato di dati come un forum

  1. #1
    Guest

    Predefinito Valorizzare array per fare un listato di dati come un forum

    Allora, vorrei valorizzare in modo da potero poi stampare a video ordinato.

    Ho due tabelle, una cats e una forums strutturate in questo modo:
    Codice:
    Campo  		Tipo   	Null  	Predefinito
    cat_id 		mediumint(8) 	No
    cat_pos 	mediumint(8) 	No
    cat_name 	varchar(255) 	No
    cat_desc 	text 		No
    cat_img 	varchar(255) 	No
    cat_lock 	tinyint(1) 	No   	0
    Codice:
    Campo  		Tipo   		Null  	Predefinito
    forum_id 	mediumint(8) 	No
    forum_pos 	mediumint(8) 	No
    forum_cat 	mediumint(8) 	No
    forum_name 	varchar(255) 	No
    forum_desc 	text 		No
    forum_lock 	tinyint(1) 	No   	0
    Ora dovrei creare un array in questo modo:
    Codice:
    Array
    (
        'ID_CATEGORIA' => Array
            (
                [name] => Comunità
                [forum] => Array
                    (
                        'ID_FORUM' => Array
                            (
                                [name] => 'NOME_FORUM'
                            )
    
                    )
    
            )
    
    )
    Ho provato ad inserire l'array dentro un while, dopo la query:
    Codice:
    SELECT c.cat_id, c.cat_name, f.*
    FROM `forums` AS f
    INNER JOIN cats AS c
    LIMIT 0 , 30
    ma non fa quello che vorrei.

    In poche parole devo mostrare il listato di un forum, con le sezioni divise per categoria.


  2. #2
    Guest

    Predefinito

    Bè, ti manca una parte fondamentale nella query: i campi su cui fare la join.

    SELECT c.cat_id, c.cat_name, f.*
    FROM `forums` AS f
    INNER JOIN cats AS c ON f.forum_cat=c.cat_id


    Ciao!

  3. #3
    Guest

    Predefinito

    Ho provato così:
    Codice PHP:
    $sql = $db->query('SELECT c.cat_id, c.cat_name, f.* FROM `forums` AS f INNER JOIN cats AS c ON f.forum_cat=c.cat_id');
    while(
    $row = $db->fetch_array(&$sql))
    {
    $cat[$row['cat_id']] = Array(
    'name' => $row['cat_name'],
    'forum' => array(
    $row['forum_id'] => array(
    'name' => $row['forum_name'],
    ),
    )
    );
    }
    Ma me lo genera così:
    Codice:
    Array
    (
        [1] => Array
            (
                [name] => Comunità
                [forum] => Array
                    (
                        [2] => Array
                            (
                                [name] => Problemi Sito/Forum
                            )
    
                    )
    
            )
    
    )

  4. #4
    Guest

    Predefinito

    Quindi? Non è come lo volevi tu?

  5. #5
    Guest

    Predefinito

    No, perchè la query restituisce:
    Codice:
    cat_id 	cat_name 	forum_id 	forum_pos 	forum_cat 	forum_name 	 	forum_desc 	 	 	 	forum_lock
    1 	Comunità 	1 	 	1 	  	1  		Presentati 	 	Prova descrizione <b>con HTML</b> 	0
    1 	Comunità 	2 	 	2 	  	1  		Problemi Sito/Forum 	Segnala qui i problemi. 	  	0
    Quindi dovrei avere nell'array forum due array.
    Ultima modifica di biccheddu : 09-09-2009 alle ore 23.56.01

  6. #6
    Guest

    Predefinito

    E' ma è normale, in quel modo tu vai a sovrascrivere ogni volta l'array totale. E' troppo contorto farlo così. Sei sicuro che non esiste un modo migliore?

  7. #7
    Guest

    Predefinito

    Per ora mi sto studiando vari vorum, ma non riesco a capire come facciano, l'unica idea era questa. Perchè se faccio così riesco, mi stampa corretamente i forum e le categorie ordinate:
    Codice PHP:
    $forums[$row['cat_id']][$row['forum_id']] = array(
    'name' => $row['forum_name'],
    );

    foreach(
    $forums as $cat => $forum)
    {
    echo
    '<b>' . $cats[$cat]['name'] . '</b><br />';

    foreach(
    $forum as $id)
    {
    echo
    $id['name'] . '<br />';
    }
    }
    Però non saprei come fare per interagire con il sistema template, quindi ora mi tocca scrivere da zero pure quello, senza poter utilizzare RainTPL.


  8. #8
    Guest

    Predefinito

    Ragazzi uppo la discussione, perchè mi sono ritrovato nello stesso problema postato poco su.

    Ho una tabella che contiene delle categorie, poi con una JOIN le selezioni e in base a quelle devo valorizzare un array.

    Per ora ho fatto:
    Codice PHP:
    $sql = 'SELECT g.*, c.genre_cat_name
    FROM bands_genres AS g
    LEFT JOIN bands_genres_cat AS c
    ON g.genre_cat = c.genre_cat_id'
    ;

    $result = $db->sql_query($sql);

    while(
    $row = $db->sql_fetchrow($result))
    {
    $cat[$row['genre_cat']] = $row['genre_cat_name'];

    $gen[$row['genre_cat']][$row['genre_id']] = $row['genre_name'];
    }
    E lo stampo con:
    Codice PHP:
    echo '<pre>';
    foreach(
    $gen as $cat => $id)
    {
    echo
    $cat . ' => ';

    foreach(
    $id as $num => $name)
    {
    echo
    ' ' . $num . ' => ' . $name . "\n";
    }

    echo
    "\n";
    }
    echo
    '</pre>';
    Ottenendo:
    Codice:
    1 => 	1 => Funk
    	2 => Industrial
    	3 => Nu
    	4 => Punk
    	5 => Rapcore
    
    2 => 	6 => Avantgarde
    
    3 => 	7 => Black
    	8 => Medieval
    	9 => Viking
    	10 => Symphonic black
    
    4 => 	11 => Death
    	12 => Brutal death
    	13 => Grindcore
    	14 => Cybergrind
    	15 => Goregrind
    	16 => Melodic death
    	17 => Progressive death
    
    5 => 	18 => Doom
    	19 => Black doom
    	20 => Death doom
    	21 => Drone doom
    	22 => Funeral doom
    	23 => Sludge
    
    6 => 	24 => Epic
    
    7 => 	25 => Extreme disco
    
    8 => 	26 => Folk
    	27 => Celtic
    	28 => Christian
    	29 => Unblack
    	30 => Oriental
    	31 => Vedic
    	32 => Viking
    
    9 => 	33 => Gothic
    
    10 => 	34 => Hard & heavy
    
    11 => 	35 => Heavy
    
    12 => 	36 => Deathcore
    	37 => Emotional Metalcore
    	38 => Moshcore
    	39 => Swedecore
    	40 => Rapcore
    
    13 => 	41 => Neoclassic
    
    14 => 	42 => New Wave of British Heavy
    
    15 => 	43 => Pop
    
    16 => 	44 => Power
    	45 => Extreme power
    	46 => Progressive Power
    	47 => Speed power
    	48 => Symphonic speed power
    
    17 => 	49 => Progressive
    	50 => Progressive death
    
    18 => 	51 => Stoner
    
    19 => 	52 => Thrash
    	53 => Crossover thrash
    	54 => Groove
    	55 => Speed thrash
    C'è un metodo meno contorto e magari più veloce per fare questo? Oppure l'unico è questo?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •