Explode a capo

  • Creatore Discussione Creatore Discussione ivarello
  • Data di inizio Data di inizio

ivarello

Utente Attivo
14 Dic 2012
211
1
16
Ragazzi problemino, praticamente prendo da un file txt, delle righe composte da nom;cognome;tel;indirizzo; esempio:
marco;mazzoli;3334578963;via compo;
marco;bianco;3457898741;via garibaldi;
monica;verdi;3387845123;via genova;
per prendere i dati faccio così:
PHP:
<html>
<head>
<title>Leggi dati</title>
</head>
<body>
<?php
$file = "C:\Users\PC_prova\Desktop\history.txt";
$dati = fopen($file, "r");
while ( $line = fgets($f, 1000) ) 
{
$dati=explode(";",$line);
echo $dati[2];
}
?>
</body>
</html>

Così facendo mi da questo risultato:
333457896334578987413387845123
Coma faccio a mettere a capo i risultati tipo così:
3334578963
3457898741
3387845123

Grazie ;)
 
Prova cosi

PHP:
$file = "C:\Users\PC_prova\Desktop\history.txt"; 
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
echo $dati[2].'<br>'; 
} 

/*
output:
3334578963
3457898741
3387845123
*/
 
Grazie funziona alla grande altra domandina
PHP:
$file = "C:\Users\PC_prova\Desktop\history.txt"; 
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
echo $dati[2].'<br>'; 
}
Se per caso facessi così
PHP:
$file = "C:\Users\PC_prova\Desktop\history.txt"; 
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
} 
echo $dati[2].'<br>';
Mi da solo un numero come faccio ad ottenere lo stesso risultato di prima???
Grazie ;)
 
Grazie funziona alla grande altra domandina
PHP:
$file = "C:\Users\PC_prova\Desktop\history.txt"; 
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
echo $dati[2].'<br>'; 
}
Se per caso facessi così
PHP:
$file = "C:\Users\PC_prova\Desktop\history.txt"; 
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
} 
echo $dati[2].'<br>';
Mi da solo un numero come faccio ad ottenere lo stesso risultato di prima???
Grazie ;)
L'echo stampa ogni volta il numero di telefono dentro al foreach, quindi per ogni riga lo stampa, non ha senso metterlo fuori.
 
Ti faccio vedere perchè ti avevo fatto questa domanda ;)
PHP:
<html>
<head>
<title>Leggi dati</title>
</head>
<body>
<?php
if($_POST) {
	calcola_questo();
} else {
	mostra_form();
}
function calcola_questo()
{
$file = "C:\Users\PC_Sviluppo\Desktop\history.txt";
$dati = file($file);
foreach($dati as $line)
{ 
$dati=explode(";",$line); 
$confronto=$dati[2].'<br>'; 
} 
$prova = trim($_POST['prova']);
  if (in_array($prova,$confronto) ) {   
  echo "<center><h1>";
  echo "Trovato ;)";
  echo '<br/>';
  echo '<br/>';
  echo "</h1></center>";
  header( "refresh:5;url=index.php" );
  exit;
  } else {
  echo $prova;
  echo '<br/>';
  echo $confronto;
  }
}
function mostra_form()
{
?>
<form name="gatto" action="" method="post">
<input id="prova" name="prova" value="3334578963" />
<input name="invia" type="submit" value="Invia - Dati Registrazione" />
</form>
<?php
}
?>
</body>
Praticamente cerco un confronto nell'array e dato che mi da un solo risultato non riesce mai a trovare il numero che combacia perchè ne confronta solo uno.
 
In quel modo dichiari una stringa che si sovrappone tutte le volte non un nuovo elemento dell'array, aggiusta cosi

PHP:
$confronto = array();
foreach($dati as $line) 
{  
$dati=explode(";",$line);  
$confronto[]=$dati[2];  
//volendo puoi riassumerlo in una linea array_push($confronto,explode(";",$line)[2]) togliendo le graffe
}

e dopo, dove lo stampi
PHP:
echo join('<br>',$confronto);
 
Ultima modifica:
Un dubbio nel caso dovessi tirare fuori un nome appartenente ad un determinato numero come potrei fare?
tipo
PHP:
$risultato_nome = dat1[0] where $dati[2] = 3334578963; // l'ho messo sotto forma di query per farmi capire anche se così è una cavolata
echp $risultato_nome;
mi dovrebbe restituire: marco
 
Nel foreach devi aggiungere una chiave che identifichi il nome

PHP:
foreach($dati as $line) 
{  
$dati=explode(";",$line);  
$confronto["$dati[0] $dati[1]"]=$dati[2];  
}

Cosi puoi ricavare il numero di telefono sapendo il nome
PHP:
echo $confronto['pinco pallo'];

e viceversa
PHP:
echo array_search(3334578963,$confronto);
 
ultima domandina hehehe e se volessi cancellare la riga a cui appartiene un numero?
 
cavolo mi sa che ho pasticciato perchè non accade nulla :S, sei sicuro che sia tutto ok e che cancelli l'intera riga? Scusa le domande sceme
 
cavolo mi sa che ho pasticciato perchè non accade nulla :S, sei sicuro che sia tutto ok e che cancelli l'intera riga? Scusa le domande sceme
Il codice sopra cancella l'elemento dell'array contenente il numero di telefono che hai messo (dove c'è $numero), non so se intendi altro per linea, comunque data la logica dello script dovrebbe essere a posto. Posta il codice pasticciato semmai
 
Vorrei che cancellasse questa riga:
marco;mazzoli;3334578963;via compo;
nel file txt
PHP:
$numero='3334578963';
unset($confronto[array_search($numero,$confronto)]);
 
Ti ho fatto una piccola funzione che dovrebbe andarti bene

PHP:
function rimuovi_linea($numero){
  $file = file('file.txt');
  foreach($file as $num => $line)if(strstr($line,(string)$numero)) unset($file[$num]);
  file_put_contents('file.txt',join('',$file));
}

rimuovi_linea(3334578963);

ps: ovviamente cambia la path del file
 

Discussioni simili