Sviluppo tabella orizzontale in un certo ordine

  • Creatore Discussione Creatore Discussione Geaway
  • Data di inizio Data di inizio

Geaway

Nuovo Utente
5 Feb 2023
4
1
3
Buongiorno a tutti!
Sono appena approdata qui e provo già a chiedere un aiutino, dato che non sono un asso col PHP...
Ho scaticato un pacchetto preimpostato da modificare per un mio piccolo progetto di gioco e c'è un punto in cui non so bene come modificare lo sviluppo della tabella.

In pratica la tabella si sviluppa in questo modo:
Cella 1 - Cella 5
Cella 2 - Cella 6
Cella 3 - Cella 7
Cella 4 - Cella 8
Vorrei cambiare l'ordine in questo modo:
Cella 1 - Cella 2
Cella 3 - Cella 4
Cella 5 - Cella 6
Cella 7 - Cella 8

So qual'è il punto da modificare (almeno credo), ma purtroppo non ho idea di come, anche cercando su internet esempi vari, mancandomi le basi per questa cosa, non so proprio come modificarla...
Posto di seguito il pezzo del codice.
Grazie mille a chi vorrà aiutarmi!

PHP:
 <div class="div_colonne_abilita_scheda">
        <table class="colonne_abilita_scheda">
            <tr>
                <?php while($row = gdrcd_query($result, 'fetch')) {
                    if($count == 0) {
                        echo '<td><table>';
                    }
                    if ((0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) != 0) {
                        echo '<tr><td><div class="abilita_scheda_nome">' .gdrcd_filter('out', $row['nome']). ': <span class="valore-skill">' . (0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) . '</span></div></td></tr>';                                   
                    }                                 
                    
                    $count++;
                    $total++;
                    if(($count >= ceil($num / 2)) || ($total >= $num)) {
                        $count = 0;
                        echo '</table></td>';
                    }
                    
                }//while
            gdrcd_query($result, 'free');
            ?>
            </tr>
        </table>
    </div>
 
Ciao, vedo che si tratta di tabelle annidate e ogni tabella interna è di per sé una colonna di quella esterna.

Chiaramente si può risolvere in vari modi ma se vuoi mantenere esattamente la stessa struttura a tabelle annidate, la cosa può risultare complessa da elaborare (quantomeno a livello logico).

Personalmente userei un array di appoggio per organizzare le due colonne, quindi, all'interno di quello stesso ciclo, andrei a smistare i vari elementi alternandoli tra una colonna e l'altra.

Qui la parte php con le modifiche (sostanzialmente va sostituita all'intero ciclo while):
PHP:
// Inizializzo l'array di appoggio per le due colonne
$colonne = array_fill(0, 2, '');

while ($row = gdrcd_query($result, 'fetch')){
    // Alterno tra le due colonne
    $key_colonna = $total % 2;

    if ((0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) != 0) {
        // Aggiungo l'elemento alla relativa colonna
        $colonne[$key_colonna] .= '<tr><td><div class="abilita_scheda_nome">' .gdrcd_filter('out', $row['nome']). ': <span class="valore-skill">' . (0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) . '</span></div></td></tr>';                                   
    }

    $count++;
    $total++;
    if(($count >= ceil($num / 2)) || ($total >= $num)) $count = 0;

}//while

// Avvolgo ciascuna colonna nell'opportuno html
array_walk($colonne, fn(&$x) => $x = "<td><table>$x</table></td>");

// Stampo a video il blocco html restituito dall'array
echo join('', $colonne);
Ho commentato le varie parti così che si capisca anche concettualmente cosa avviene.

Ovviamente chiedi pure se hai bisogno di chiarimenti e fai sapere se può andare bene.
 
Intanto grazie millissime dell'aiuto! Nel frattempo però ho avuto la fortuna di esser aiutata da una persona che ha preaticamente debellato tutto e riscritto il codice in tutt'altro modo e devo dire che funziona alla perfezione proprio come speravo!
Lo posto qui di seguito, in caso possa essere d'aiuto/ispirazione a qualcuno con problemi simili in futuro

Codice:
    <div class="div_colonne_abilita_scheda">
        <!-- Questa è l'evoluzione magica-->
        <div style="display: grid; grid-template-columns: repeat(2,minmax(0,1fr))">
            
                <?php while($row = gdrcd_query($result, 'fetch')) {
                    
                    if ((0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) != 0) {
                        echo '
                            <div class="abilita_scheda_nome">' .gdrcd_filter('out', $row['nome']). ': <span class="valore-skill">' . (0 + gdrcd_filter('out', $ranks[$row['id_abilita']])) . '</span></div>';                                   
                    }                                 
                    
                  
                    
                }//while
            gdrcd_query($result, 'free');
            ?>
            
        </div>
 
  • Like
Reactions: WmbertSea

Discussioni simili