PHP: Läsa rad för rad och mer...

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Min hjärna tänker bara Obj-C just nu och så måste jag skriva ett php-script som läser en text-fil rad för rad och del för del i raden.
Googlat tills jag blev less... så nu tänkte jag fråga er.

filen är en text-fil:
Kalle Kula,kalle.kula@mail.com,06783
Marre Kula,marre.kula@mail.com,02345

Det resultat jag vill ha är en array eller helst en NSDictonary fast i PHP.

fname = kalle
lname = kula
email=kalle.kula@mail.com
phone=06783

osv

Hur gör jag detta?

$lines = file('minfil.txt');

foreach($lines as $line){
$tmp = explode(',',$line);
print_r($tmp);
}

  • Administratör
  • Rotterdam
  • 2013-01-16 20:34

Ovanstående exempel fungerar antagligen, beroende på filens storlek, dina minnesbegräsningar och exakt vad den innehåller. Eftersom att din data ser ut som CSV så bör du dock kika på PHP: fgetcsv - Manual istället, som läser en rad åt gången och garanterat separerar fälten på korrekt sätt. Se exempel nedan:

<?php

$data = <<<'EOT'
Kalle Kula,kalle.kula@mail.com,06783
Marre Kula,marre.kula@mail.com,02345
EOT;

$stream = fopen("php://memory", "w+");
fwrite($stream, $data);
rewind($stream);

$dict = [];

while(($line = fgetcsv($stream, 0, ",")) !== false)
{
    $dict[] = [
        "name"  => $line[0],
        "email" => $line[1],
        "phone" => $line[2],
    ];
}

fclose($stream);

var_dump($dict);

Edit: Körbart exempel

Efter detta återstår att behandla namen, det är dock lättare sagt än gjort. De två du har i exemplet skulle ju räcka att dela vid mellanslaget, men du har väl inte sådan tur att alla namn i databasen består av precis två delar?

Grymma svar från två stycken! Tack!

Det är ingen CSV-fil även om det ser så ut, det är faktiskt en export från ett AD till komma-separerad fil.
Och jag ska erkänna att det ofta hjälper att beskriva problemet för andra och sig själv för att hitta en lösning.
För det var precis vad jag gjorde igår kväll och den liknar mest =Jonaz= lösning men jag har stött på ett sådant underligt problem.
Men jag ska förklara det för er nu så kanske jag hittar lösningen själv.

function splitRowToDB($rowPieces, $timesInsert) {
    	for($t=0;$t<$timesInsert;$t++) {
	    	echo $t."\n";
			$nameSplit = explode(" ", $rowPieces[0]);
			 $insertQuery = "INSERT INTO users_mm (fname, lname, email, phone) VALUES ('$nameSplit[0]','$nameSplit[1]','$rowPieces[1]','$rowPieces[2]')";
	    }
    }

$timesInsert = 2.
Trots deta faktum körs for-satsen två gånger...
0
1
0
1

Och varför i hela friden gör den det?

Felet sitter nog utanför funktionen: for satsen kanske körs två gånger eftersom funktionen splitRowToDB anropas två gånger. Den skall visserligen loopas två gånger och då skall få två resultat 0 och 1, inte fyra som du fått.

Jag hittar heller inget i funktionen som skall få den att köra for-satsen två gånger.

Då fortsätter jag med nästa grej ur detta... jag har en bunt olika epost-adresser.
Jag vill utvinna domännamnet utan .se.
kalle.kula@företag.se
Jag vill altså reg-exa fram en output på:
företag

Kan inte vara så svårt. Jag fortsätter här så får vi se vem som hinner först.

Tack The Real Viking! Klart det var så!

Nu har jag fått den riktigt filen, den med 987 rader i. Så nu kan jag testa ordentligt.

Nåt sånt här kanske?

.*@(.*)\..*$

Har inte kontrollerat det mer än via: REGex TESTER v1.5.3 - test/validate regular expressions, online tester så det kanske är något som behöver modifieras innan det funkar i PHP.

Men vilken sida! Tack!
Den kommer att användas mer än en gång.

1
Bevaka tråden