- Home
- Categorie
- Coding e Sistemistica
- PHP
- Funzione con vettore multidimensionale
-
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 **231La 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> </td>\n
\t\t<td> </td>\n
\t\t<td> </td>\n
\t</tr>\n
\t<tr>\n
\t\t<td> </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> </td>\n \t\t<td> </td>\n \t\t<td> </td>\n \t</tr>\n"; $html_table.="\t<tr>\n \t\t<td> </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
**
-
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> </td>\n
\t\t<td> </td>\n
\t\t<td> </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> </td>\n
\t\t<td> </td>\n
\t\t<td> </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.
-
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.
-
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.