Originalmente inviato da
mzanella
In PHP tutti i vettori sono
hash table. Puoi creare vettori indicizzati su stringe:
Codice PHP:
$hash_table = [];
$hash_table['indice 1'] = 'valore 1';
$hash_table['indice 2'] = 'valore 2';
...
$hash_table['indice N'] = 'valore N';
E tutti i vettori sono eterogenei, puoi assegnare un valore qualunque a ciascun elemento, anche un altro vettore:
Codice PHP:
$array = [];
$array[] = 42;
$array[] = 'string';
$array[] = [1, 2, 3];
Da notare la sintassi
$vettore[] = valore; che vuol dire aggiungi l'elemento
valore al vettore
$vettore.
Metti insieme queste tre cose e ottieni il tuo vettore di telecomandi indicizzato per marca:
Codice PHP:
$telecomandi = [];
$telecomandi['marca 1'][] = $telecomando1;
$telecomandi['marca 2'][] = $telecomando2;
$telecomandi['marca 1'][] = $telecomando4;
...
$telecomandi['marca M'][] = $telecomandoN;
Come posso sfruttare questa interessante funzione?
Nel frattempo, ho formattato i campi riordinando i risultati (funziona tutto)
Codice PHP:
<?php
// Recupera i dati (questo non è stato modificato)
$items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
$results = [];
foreach ($items as $record) {
$data = explode('|', $record);
$results[] = [
'marca' => $data[0],
'modello' => $data[1],
'link' => $data[2],
'immagine' => $data[3],
'numero_tasti' => $data[4],
'colore_tasti' => $data[5],
'frequenza' => $data[6],
'codifica' => $data[7],
'dip' => $data[8]
];
}
// Raggruppa i dati per marca
$grouped_results = [];
foreach ($results as $result) {
$grouped_results[$result['marca']][] = $result;
}
// Stampa i risultati: un "blocco" per ogni marca, ogni blocco contiene i telecomandi
foreach ($grouped_results as $marca => $telecomandi) {
// Stampa la marca
echo "<div class=\"tabellasuperiore\">";
echo "<hr><h2 class=\"nome_telecomando\">" . $marca . "</h2><br/></div>";
// Stampa i telecomandi di quella marca (a titolo di esempio mostra solo marca e modello)
foreach ($telecomandi as $telecomando) {
echo "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
echo $i . "-" . $telecomando['marca'] . "-" . $telecomando['modello'] . "<br/>";
echo "<a href=\"" . $telecomando['link'] . "\">"
. "<img src=\"" . $telecomando['immagine'] . "\" alt=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" title=\"" . $telecomando['marca'] . " " . $telecomando['modello'] . "\" width=\"150\">"
. "<br/>"
. "<h2 class=\"nome_telecomando\">" . $telecomando['marca'] . "</h2> - " . $telecomando['modello']
. "</a>"
. "<br/>"
. "numero tasti " . $telecomando['numero_tasti']
. "<br/>"
. "colore tasti " . $telecomando['colore_tasti']
. "<br/>"
. "frequenza " . $telecomando['frequenza']
. "<br/>"
. "tipo codifica " . $telecomando['codifica']
. "<br/>"
. "numero dip " . $telecomando['dip']
. "<br/></div></div>";
}
}
?>
Ho il mio css al quale ho aggiunto una classe per formattare la tabella (senza table e tr) riportando le classi dell'altra pagina (alcune in effetti non le uso)
Codice:
<style type="text/css">
h2.nome_telecomando {
display: inline;
}
.risultato-ricerca {
display: block;
text-align: center;
}
.risultato-ricerca a img {
display: block;
margin: auto;
}
#risultati-ricerca {
overflow: auto;
width=100%
}
.risultato-ricerca {
display: block;
text-align: center;
float: left;
width: 25%;
}
.tabellasuperiore {
clear: both;
width: 100%;
border: solid 1px #cccccc;
background: #F78731;
}
</style>
A questo punto ho una variabile i$ che dovrebbe contenere il numero progressivo di record
Se provo a contarla con un i$=i$+1 nel primo ciclo for-next mi stampa sempre il numero totale di righe (17) e non il risultato che voglio...
Riprovo mettendo
Codice PHP:
<?php
// Recupera i dati (questo non è stato modificato)
$items = file('database/telecomandi01.txt', FILE_IGNORE_NEW_LINES);
$results = [];
foreach ($items as $record) {
$i=$i+1
$data = explode('|', $record);
$results[] = [
'record' => $i,
'marca' => $data[0],
'modello' => $data[1],
'link' => $data[2],
'immagine' => $data[3],
'numero_tasti' => $data[4],
'colore_tasti' => $data[5],
'frequenza' => $data[6],
'codifica' => $data[7],
'dip' => $data[8]
];
[...]
E come immaginavo si blocca. (in effetti mentre lo scrivevo mi son reso conto di mischiare capra e cavoli, ma ci ho tentato)
come lego il numero di record al prodotto?
Alla fine dovrebbe venire qualcosa come
Codice PHP:
echo $i . "-" . $telecomando['marca'] . "-" . $telecomando['modello'] . "<br/>";
Cioè un numero univoco in base alla riga del file telecomando01.txt, marca e modello...
Ci ho pensato: che bisogno ho di una variabile $i? ho la variabile $telecomando che si incrementa col foreach.
Tutto felice cambio il mio $i ottenendo
Codice PHP:
foreach ($telecomandi as $telecomando) {
echo "<div class=\"risultato-ricerca\"><div class=\"borgia\">";
echo $telecomando . "-" . $telecomando['marca'] . " - " . $telecomando['modello'] . "<br/>";
E il risultato è (uno a caso)
Array - PROMATER - 1 - 224.7MHz
Cosa sbaglio?