Modificare una funzione per creazione tabella html

Monital

Utente Attivo
15 Apr 2009
778
2
18
Mis cuso se apro questo topic dato che questo è un argomento più volte trattato però io e le funzioni non andiamo molto d'accordo e non so come "manometterle"

sul Web ho trovato una funzione che fa al caso mio però questa mi lista l'array solo su una colonna mentre io voelvo distribuire l'array su 3 colonne.

il contenuto dell'array può variare continuamente quindi non ho la minima idea di come fare

la funzione che ho trovato èq eusta

PHP:
function mostratabella($array) {
    //trasforma un array di array in una tabella
    echo('<table>');
    foreach($array as $row) {
        //ogni elemento dell'array è un array a sua volta, per la precisione una riga della tabella
        echo('<tr>');
        foreach($row as $cell) {
            //ogni elemento della riga è finalmente una cella
            echo('<td>'.$cell.'</td>');
        }
        echo("</tr>\n");
    }
    echo('</table>');
}
con uno script listo solo le directory presenti in una mia dir e voelvo intabellare tutte le directory trovate,associandole ad un immagine, insomma sto cercando di creare un pannello dia mministrazione.

perquesto ho già fatto ma volevo intabellarlo usando questa funzione che mi sembra abbastanza valida per il mio caso

qualcuno sa come fare?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
a me sembra che viene distribuito già su 3 colonne
PHP:
<?php

$array = array(
    0 =>
    array(
        'campo0' => '0 valore 0',
        'campo1' => '0 valore 1',
        'campo2' => '0 valore 2'
    ),
    1 =>
    array(
        'campo0' => '1 valore 0',
        'campo1' => '1 valore 1',
        'campo2' => '1 valore 2'
    )
);

function mostratabella($array) {
    //trasforma un array di array in una tabella
    echo('<table>');
    foreach ($array as $row) {
        //ogni elemento dell'array è un array a sua volta, per la precisione una riga della tabella
        echo('<tr>');
        foreach ($row as $cell) {
            //ogni elemento della riga è finalmente una cella
            echo('<td>' . $cell . '</td>');
        }
        echo("</tr>\n");
    }
    echo('</table>');
}

mostratabella($array);
?>
Sempre che l'array abbia tre elementi , se ne ha quattro le colonne saranno quattro
ma forse non ho capito benen il problema
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Ciao,
a me sembra che viene distribuito già su 3 colonne
PHP:
<?php

$array = array(
    0 =>
    array(
        'campo0' => '0 valore 0',
        'campo1' => '0 valore 1',
        'campo2' => '0 valore 2'
    ),
    1 =>
    array(
        'campo0' => '1 valore 0',
        'campo1' => '1 valore 1',
        'campo2' => '1 valore 2'
    )
);

function mostratabella($array) {
    //trasforma un array di array in una tabella
    echo('<table>');
    foreach ($array as $row) {
        //ogni elemento dell'array è un array a sua volta, per la precisione una riga della tabella
        echo('<tr>');
        foreach ($row as $cell) {
            //ogni elemento della riga è finalmente una cella
            echo('<td>' . $cell . '</td>');
        }
        echo("</tr>\n");
    }
    echo('</table>');
}

mostratabella($array);
?>
Sempre che l'array abbia tre elementi , se ne ha quattro le colonne saranno quattro
ma forse non ho capito benen il problema

penso dia ver trovato il difetto

facendo un count del mio array(diciamo di 5 elementi) invece di uscirmi 5 mi da
1
1
1
1
1

:crying:
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
allora qualcosa non quadra

ho trovato uno script per leggere solo le directory (visto che non ne venivo a capo da solo) e l'ho adattato al mio caso
PHP:
$dir = "dir";
$d = dir($dir);
while ($entry = $d->read()) {
if(is_dir($dir."/".$entry)){
if($entry!="." && $entry!=".."){ 

echo "<center><a href=\"./".$dir."/".$entry."/index.php\"><img src=img/".$entry.".png widht=\"50\" height=\"50\"><center>".$entry."</a><br>";
a me serviva listare solo le directory presenti in /dir però la variabile $entry mi sa che non viene considerato array difatti con var dump non mi da la sequenza dell'array ma solo la lunghezza delle stringhe

perdonatemi l'ignoranza ma pian pianello i sto arrivando a quessti array.

sto andando nel pallone
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Per creare un array delle directory puoi provare cosi:

PHP:
$dir = "dir";
$d = dir($dir);
$array_directory = array();
while ($entry = $d->read()) {
    if (is_dir($dir . "/" . $entry) && strpos($entry, ".") === false) {
        $array_directory[] = $entry;
    }
}
// lo mostri
var_dump($array_directory);
non capisco però cosa centra la funzione mostratabella()
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Per creare un array delle directory puoi provare cosi:

PHP:
$dir = "dir";
$d = dir($dir);
$array_directory = array();
while ($entry = $d->read()) {
    if (is_dir($dir . "/" . $entry) && strpos($entry, ".") === false) {
        $array_directory[] = $entry;
    }
}
// lo mostri
var_dump($array_directory);
non capisco però cosa centra la funzione mostratabella()
in pratica io vorrei che la lista delle dir (a cui ogni dirè associata un immagine) mi si intabelli in colonne da 3 o da 4

però col tempo le dir possono aumentare quindi non ho un numero fisso

in sostanza sto cercando dic reare un pannello admin dove ogni operazione deve essere collegata ad una dir

però ora usando il tuo suggerimenti mi lascia tutto su una riga mentre io vorrei in sostanza dividere il totale dell'array per 3 o per 4
PHP:
$numero_colonne=3
//oppure 4

 $righe= $numero_array/$numero_colonne
maronn :hammer:
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Prova cosi:

PHP:
<?php
$dir = "dir";
$d = dir($dir);
$array = array();
while ($entry = $d->read()) {
    if (is_dir($dir . "/" . $entry) && strpos($entry, ".") === false) {
        $array[] = $entry;
    }
}
function mostratabella($array) {
    echo('<table border=1>');
    foreach ($array as $row) {
        echo('<tr>');
        echo('<td><img src="' . $row . '.png" alt="image"/></td>');
        echo('<td>' . $row . '</td>');
        echo("</tr>\n");
    }
    echo('</table>');
}
mostratabella($array);
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
allora

intanto l'immagine deve anch'essa indirizzare al file quidni deve essere così

PHP:
		echo "<center><a href=\"./".$dir."/".$entry."/index.php\"><img src=img/".$entry.".png widht=\"50\" height=\"50\"><center>".$entry."</a><br>";
cmq anche togliendo n'attimo il problema della dir delle immagini e dell'hyperlink comunque la tabella la incolonna in due su una gli mette l'immagine sull'altra il nome della dir

mentre io voglio na cosa del genere

poniamo il caso di avere 6 directory
Nome
Cognome
Cose
Citta
Cantanti
Mestieri

in ognuna di questa directory c'è un file index.php che fa quelloc he deve fare. al di fuori di questo ho creato una dir chiamata img dove ho le immagini di ogni dir ad esempio" Mestieri.png"

ora lo script in sostanza mi deve listare le directory ed incolonnarle tipo

Nome | Cognome |Cose
Città |Cantanti |Mestieri


Pensavo bastasse modificare la funzione mostratabella dandogli i parametri di numero colonna invece mi sa che non è così
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ah, ora ho capito :D

ti basta andare a capo nel ciclo ogni 3 td chiudendo la tr

Ora devo uscire, se non ti risponde nessuno o se non riesci da solo quando rientro ti faccio un esempio

:byebye:
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
non rieco a fare il ciclo

cioè ilcilco ce la faccio pure ma salta sempre le righe :hammer:

inizio ad ofiare ste tabelle

il problem e che non mi si infila nel cervello il meccnismo
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
In effetti non è stato facile come pensavo, meglio i div che le tabelle
PHP:
<?php
$dir = "dir";
$d = dir($dir);
$array = array();
while ($entry = $d->read()) {
    if (is_dir($dir . "/" . $entry) && strpos($entry, ".") === false) {
        $array[] = $entry;
    }
}
function mostratabella($array) {
    echo('<table>');
    $i = 1;
    foreach ($array as $row) {
        if ($i == 1) {
            echo('<tr>');
        }
        echo('<td><img src="img/' . $row . '.png" alt="image "/>' . $row . '</td>');
        if ($i == 3) {
            echo('</tr>');
            $i = 1;
        } else {
            $i++;
        }
    }
    // creo le td che mancano
    if ($i != 1) {
        echo ('<td colspan="' . (4 - $i) . '">&nbsp;</td>');
        echo('</tr>');
    }
    echo('</table>');
}
mostratabella($array);
?>
Dimmi se hai bisogno che te lo commenti
 
Ultima modifica:

Monital

Utente Attivo
15 Apr 2009
778
2
18
figurati non c'è bisogno ho capito tutto :incazz::incazz::incazz::incazz::incazz:


funziona :tifoso::tifoso::tifoso:

se me la puoi commentare mi sarà molto utile sia per capirne il procedimento sia per il futuro.
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
un ultima(ma non ci sperare :D) domanda al riguardo.

al posto dell'href ho usato un button però in entrambi i casi l'ordine dei button avviene credo epr ultima modifica, difatti quando modiifco il nome della cartella ad esempio il button cambia posizione come posso fare per ancorare il button o perlomeno dagli un ordine alfabetico?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Intanto ho commentato il codice:
PHP:
<?php

// percorso della directory
$dir = "dir";
// istanza della classe Directory 
$d = dir($dir);
//inizializzo l'array
$array = array();
// leggo il contenuto della directory con un ciclo
while ($entry = $d->read()) {
    // se trovo una directory che non contiene il . (punto)
    if (is_dir($dir . "/" . $entry) && strpos($entry, ".") === false) {
        // popolo l'array
        $array[] = $entry;
    }
}

function mostratabella($array) {
// apro la tabella
    echo('<table>');
    // inizializzo un contatore Servirà per contare le colonne e chiudere la tr
    $i = 1;
    // inizio a ciclre l'array creato
    foreach ($array as $row) {
        // se sono alla prima colonna
        if ($i == 1) {
            // apro la riga della tabella
            echo('<tr>');
        }
        // creo la colonna
        echo('<td><img src="img/' . $row . '.png" alt="image "/>' . $row . '</td>');
        // se sono alla terza colonna (qui si modifica in base alle colonne che si vuole visualizzare)
        if ($i == 3) {
            // chiudo la riga della tabella
            echo('</tr>');
            // riporto il contatore alla prima colonna
            $i = 1;
            // altrimenti
        } else {
            // incremento il mumero della colonna
            $i++;
        }
    }
    // qui sono fuori dal ciclo
    // Se chiuso il ciclo non ho ancora completato le 3 colonne 
    if ($i != 1) {
        // conto le colonne che mancano e le riempio con uno spazio vuoto
        echo ('<td colspan="' . (4 - $i) . '">&nbsp;</td>');
        // chiudo la riga che è rimasta aperta
        echo('</tr>');
    }
    // chiudo la tabella
    echo('</table>');
}

// richiamo la funzione mostratabella()
mostratabella($array);
?>
di quale href parli? mi sono perso!
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
grazie del commenot intanto ora me lo leggo ben bene

si vabè vicino all'img avevo inserito un href per poi sostituirlo con un button così cliccando su un elemnto dell'array mi indirizza su determinate apgine

i button altro non sono che le directory, directory che quando nea ggiungo una o ne modifico il nome cambiano la disposizione sull'index mentre io le volevo ancorate.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
prova cosi :
PHP:
// creo la colonna
 echo('<td><img src="img/' . $row . '.png" alt="image "/><button onclick="location.href=\'' . $row . '/index.php\'">' . $row .'</button></td>');
devi stare molto attento agli apici