Funziona ho aggiunto sort($riga); per l'ordine numerico. Vorrei però chiederti alcune cose.
In primis mi piacerebbe se mi spiegassi passo passo il codice da te postato. Il perché tu abbia messo $riga fuori e il modo in cui hai contato con $contatore++
Purtroppo non mi accontento che le cose funzionino mi piacerebbe capirle, trovo veramente inutile e sterile scopiazzare codice di altri senza almeno capirlo, per piacere istruiscimi T.T :crying:
Il codice funziona, tuttavia (so che sono rompipalle) ho notato una cosa: se faccio il de-bug di
PHP:
var_dump($riga);
noto che ogni canale viene duplicato.
Ora ti faccio capire meglio:
Il codice php per i primi 2 canali è questo:
PHP:
<?php
$uri = 'http://www.laguidatv.it/';
$get = file_get_contents($uri);
$contatore = 0;
//costruisco una posizione iniziale
$inizio = strpos($get, '<');
$riga=array(0 => array("canale" => "canale", "trasmissione" => "trasmissione"));
// comincio il ciclo
for($i=0; $i<2; $i++){
//grab del programma televisivo
$prog_inizio = strpos($get, '<span class="search_text">', $inizio);
$prog_fine = strpos($get, '</span>', $prog_inizio);
$trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);
//grab del canale che trasmette il programma
$canale_inizio = strpos($get, '<i>', $prog_inizio);
$canale_fine = strpos($get, '</i>', $canale_inizio);
//chiudo la prima posizione
$inizio = $canale_fine;
$canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);
$riga[$contatore]['canale']=$canale;
$riga[$contatore]['trasmissione']=$trasmissione;
$contatore++;
var_dump($riga);
}
sort($riga);
//ordinamento
for($i = 0; $i < $contatore; $i++){
echo "<br />" . $riga[$i]['canale'] . " " . $riga[$i]['trasmissione'];
}
?>
L'ordine alfabetico è rispettato solo che non capisco perchè ci sono delle ripetizioni:
Ovviamente non c'è fretta è lapalissiano intuire che non mi devi nulla quindi ovviamente se e quando puoi mi darai spiegazioni e testerai il codice xD :beer:
Si scusa No a video va tutto come dovrebbe andare. Per questo ti avevo scritto che molto probabilmente non avevo capito il codice. Se puoi domani me lo spieghi?
Ho testato il codice.
Ripeteva la prima riga 2 volte perchè lo avevi messo dentro al ciclo il var_dump().
Poi bisogna mettere +26 e -26 (+3 e -3) per eliminare i tag.
Non c'è bisogno di dichiarare il vettore fuori ma puoi inserire i valori direttamente nel ciclo come ho fatto io nel codice seguente.
PHP:
<?php
$uri = 'http://www.laguidatv.it/';
$get = file_get_contents($uri);
$contatore = 0;
//costruisco una posizione iniziale
$inizio = strpos($get, '<');
// comincio il ciclo
for($i=0; $i<3; $i++){
//grab del programma televisivo
$prog_inizio = strpos($get, '<span class="search_text">', $inizio);
$prog_fine = strpos($get, '</span>', $prog_inizio);
$trasmissione = substr($get,$prog_inizio+26,$prog_fine-$prog_inizio-26);
//grab del canale che trasmette il programma
$canale_inizio = strpos($get, '<i>', $prog_inizio);
$canale_fine = strpos($get, '</i>', $canale_inizio);
//chiudo la prima posizione
$inizio = $canale_fine;
$canale = substr($get,$canale_inizio+3,$canale_fine-$canale_inizio-3);
$riga[$contatore]['canale']=$canale;
$riga[$contatore]['trasmissione']=$trasmissione;
$contatore++;
}
var_dump($riga);
sort($riga);
//ordinamento
for($i = 0; $i < $contatore; $i++){
echo "<br />" . $riga[$i]['canale'] . " " . $riga[$i]['trasmissione'];
}
?>
Se servono ulteriori spiegazioni chiedi pure.
Ovviamente alla fine c'è la stampa e non credo che necessiti alcuna spiegazione tantomeno l'ordinamento che credo abbia fatto tu o quantomeno lo utilizzi bene visto che ti ordina i canali.
Mi si offusca la vista a leggere ora per quanto sono stanco xD mi hanno fatto correre pe 30" + 1h e 20 di attrezzi :V sto morendo, credimi che domattina sicuramente avrò bisogno di chiarimenti (non sulla stampa e non sull'ordinamento =) )
Ho provato il codice ma c'è qualcosa che non va, all'improvviso mostra tantissimi link. Prova a estendere il codice a 236 che dovrebbe essere il numero dei canali
Si si fanciullo funziona bene, ovviamente se il webmaster del sito apporta modifiche penso che sia normale che sballi un pochino. Sai percaso come posso fare per far si che l'output della pagina sia in csv? magari se hai qualche guida sarebbe il massimo...
Poi vorrei chiederti qualche spiegazione se non ti secca:
1.
PHP:
$inizio = strpos($get, '<');
qui perchè hai di nuovo richiamato il contenuto della pagina con $get?
2.
Potresti spiegarmi la sintassi di queste righe?
Si ma a che ti serve metterle in un csv? Cambiano ogni minuto i programmi quindi non vedo l'utilità.
Per quanto riguarda i punti da spiegare (premetto non sono abile a spiegare):
1) mi prendo la posizione iniziale del documento che vista così non servirebbe ma siccome nel ciclo serve la posizione a cui è arrivato il ciclo precedente per poter continuare alla fine allora devo ogni volta ripartire dalla posizione $inizio che, una volta che abbiamo prelevato quello che ci serve, lo metto al punto di fine grazie alla riga:
PHP:
$inizio = $canale_fine;
2) $riga è un array di 2 elementi per ogni posizione e così lo sto popolando con tutti i valori di canale e trasmissione (che sono i due elementi).