• User

    Funzione con vettore multidimensionale

    Ciao a tutti,
    sto facendo uno script che mi prende i dati da un vettore multidimensionale del tipo $vector[$indice][categoria,prodotto] e lo stampa creando una tabella.
    Il problema è che quando uso il vettore multidimensionale all'interno della funzione richiamata mi da il seguente errore: Parse error: syntax error, unexpected T_STRING in C:\wamp\www\mys script\send.php on line **231

    La funzione la richiamo così dallo script principale : genera_tabella ($vector *[],$i);

    La funzione è dichiarata nel seguente modo: function genera_tabella ($vector,$i)

    Lo script è il seguente:

    function genera_tabella ($vector,$i)
    {
    $html_table="<table width="800" border="1">\n
    \t<tr>\n
    \t\t<th scope="col"> Category </th>\n
    \t\t<th scope="col"> Product </th>\n
    \t\t<th scope="col"> Unit </th>\n
    \t\t<th scope="col"> Quantity </th>\n
    \t</tr>\n";
    for ($ii=0;$ii<$i;$ii++)
    {
    if ($ii==0)
    {
    $html_table.="\t<tr>\n
    \t\t<td>.$vector[$ii]["category"].</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t</tr>\n
    \t<tr>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>.$vector[$ii]["name"].</td>\n
    \t\t<td>.$vector[$ii]["id"].</td>\n
    \t\t<td>.$vector[$ii]["q"].</td>\n
    \t</tr>\n";
    $ii++;
    }

    if ($vector[$ii]["category"]!=$vector[$ii - 1]["category"])
        $html_table.=\"\t<tr>\n
                \t\t<td>.$vector[$ii]["category"].</td>\n
                \t\t<td>&nbsp</td>\n
                \t\t<td>&nbsp</td>\n
                \t\t<td>&nbsp</td>\n
                \t</tr>\n";
                
    $html_table.="\t<tr>\n
                \t\t<td>&nbsp</td>\n
                \t\t<td>.$vector[$ii]["name"].</td>\n
                \t\t<td>.$vector[$ii]["id"].</td>\n
                \t\t<td>.$vector[$ii]["quant"].</td>\n
                \t</tr>\n";
    

    }

    $html_table.="</table>";

    }

    echo "$html_table";

    Aiutatemi per piacere. Penso di avere sbagliato nel passaggio dell'array nella funzione ma non so come correggere.
    Grazie
    **


  • User

    Ciao,

    se lo script è proprio così come l'hai scritto ci sono diverse cose sbagliate:

    Per esempio l'assegnamento delle stringhe alle variabili:

    Inanzitutto ti consiglio di utilizzare gli apici al posto di " quando hai bisogno di inserire le virgolette in un assegnamento.

    inoltre il \n in HTML non funziona...a capo in HTML si scrive <br> uguale per i \t invece dovresti utilizzare i tag "cell-spacing" delle Table

    $html_table="<table width="800" border="1">\n
    \t<tr>\n
    \t\t<th scope="col"> Category </th>\n
    \t\t<th scope="col"> Product </th>\n
    \t\t<th scope="col"> Unit </th>\n
    \t\t<th scope="col"> Quantity </th>\n
    \t</tr>\n";

    Questo codice risulterebbe così:

    $html_table="<table width='800' border='1' cell-spacing='2'><br>
    <tr><br>
    <th scope='col'> Category </th><br>
    <th scope='col'> Product </th><br>
    <th scope='col'> Unit </th><br>
    <th scope='col'> Quantity </th><br>
    </tr><br>";

    Già questo può aiutarti molto (e può aiutare chi legge i tuoi post sul forum) a rendere il codice più chiaro.

    Quando più sotto riassegni la variabile $html_table

    $html_table.="\t<tr>\n
    \t\t<td>.$vector[$ii]["category"].</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t</tr>\n";

    Sbagli inanzitutto a mettere " dopo $html_table.= (è una stringa e dovrebbe iniziare semplicemente con le virgoette)

    Quando poi vai ad inserire il codice PHP all'interno della stringa:

    \t\t<td>.$vector[$ii]["category"].</td>\n

    devi richiudere le virgolette prima di inserire una variabile:

    $html_table.="\t<tr>\n
    \t\t<td>".$vector[$ii]["category"]."</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t\t<td>&nbsp</td>\n
    \t</tr>\n";

    Per poi riaprirle dopo il punto.

    Per quanto riguarda il passaggio del vettore nella funzione non riesco a capire perchè passi **$vector *[] **In questo modo non passi il vettore ma l'elemento (o l'array) presente a **$vector ***

    Per passare l'intero vettore basta che tu richiami la funzione in questa maniera:

    genera_tabella ($vector,$i);

    Così facendo nella funzione potrai andarti a cercare gli elementi nel tuo vettore utilizzando la sintassi $vector [elem_1][elem_2]

    Ultima cosa, utilizzi la variabile $ii... da dove la prendi?? ne la passi ne la assegni nello script.

    Spero di esserti stato di aiuto se hai qualche altro dubbio non esitare a chiedere 😉

    Federico.


  • User

    Grazie mille per tutte le puntualizzazioni e i consigli oltre alla risposta alla mia domanda principale.

    Sapevo ci fossero molti errori nello script ma mi hai fatto un debug spettacolare. Metto in atto tutto quello che mi hai detto e ti faccio sapere.
    Grazie di nuovo.


  • User

    ora voglio mettere un controllo nel vettore $vector $ii in modo che se il campo "id" è vuoto venga stampato almeno uno spazio in modo che la tabella non venga stampato con la cella senza bordo, csa se accade se ho una cella della tabella senza nessun dato.