!Hjälp! skrivning av array till/från fil! PHP

Permalänk
Medlem

!Hjälp! skrivning av array till/från fil! PHP

Hej!

Har ett problem i php som jag inte lyckas lösa.
Jag har ett antal nummer skrivna på en txt fil liknande:
4
2
5
16
2
4
Det jag vill göra är att läsa in nummerna till en array så platsen 0 -> 4, 1->2, 2->5. 3<16 osv. Sen uppdaterar jag nummerna(ökar bara värdet med 1 eller 2) i min kod och sedan vill jag skriva ut dem.
Problemet är att de skriv inte ut som jag vill. Så här skrivs de ut:
4

2

5

16
osv.
jag vill få den som den var ovan.

Hoppas jag fick med allt där.
Min kod:

<?php $scoreNo = array(); //även testat med $scoreNo = array(0,0,0,0,0,0,0,0,0,0,0,0); $fileN = fopen("./Txt/answerN.txt", "r") or exit("Could not open NO file"); $i = 0; while(!feof($fileN )) { $scoreNo[$i] = fgets($fileN); //läsa in rad per rad $i++; } fclose($fileN); //uppdatera platserna scoreNo $fileN = fopen("./Txt/answerN.txt", "r+") or exit("Could not open NO file"); $i = 0; foreach($fragor as $value) { $var_2 = $scoreNo[$i] . "\r\n" ; //funkar inte med bara "\r" eller "\n" Blir inget radbyte fputs($fileN, $var_2); //skriv ut }

Jag lyckas inte lösa detta och blir tokig:)
Tack på förhand!

Permalänk
Medlem

Jag är inte helt glassklar över vad du försöker göra men det är två saker som förbryllar mig med den andra loopen:

1.) Du sätter $i till 0, men ökar det aldrig i loopen.

2.) Du loopar igenom $fragor men jag ser ingen sån i koden, vilket borde betyda att den andra loopen inte körs. Hade den kört så borde (enligt mig i alla fall) alla rader ha samma värde eftersom du aldrig ökar $i

$i = 0; foreach($fragor as $value) { $var_2 = $scoreNo[$i] . "\r\n" ; fputs($fileN, $var_2); //skriv ut }

Visa signatur

-- Arkade --

Permalänk
Medlem
Skrivet av Lofie:

Hej!

Har ett problem i php som jag inte lyckas lösa.
Jag har ett antal nummer skrivna på en txt fil liknande:
4
2
5
16
2
4
Det jag vill göra är att läsa in nummerna till en array så platsen 0 -> 4, 1->2, 2->5. 3<16 osv. Sen uppdaterar jag nummerna(ökar bara värdet med 1 eller 2) i min kod och sedan vill jag skriva ut dem.
Problemet är att de skriv inte ut som jag vill. Så här skrivs de ut:
4

2

5

16
osv.
jag vill få den som den var ovan.

Hoppas jag fick med allt där.
Min kod:

<?php $scoreNo = array(); //även testat med $scoreNo = array(0,0,0,0,0,0,0,0,0,0,0,0); $fileN = fopen("./Txt/answerN.txt", "r") or exit("Could not open NO file"); $i = 0; while(!feof($fileN )) { $scoreNo[$i] = fgets($fileN); //läsa in rad per rad $i++; } fclose($fileN); //uppdatera platserna scoreNo $fileN = fopen("./Txt/answerN.txt", "r+") or exit("Could not open NO file"); $i = 0; foreach($fragor as $value) { $var_2 = $scoreNo[$i] . "\r\n" ; //funkar inte med bara "\r" eller "\n" Blir inget radbyte fputs($fileN, $var_2); //skriv ut }

Jag lyckas inte lösa detta och blir tokig:)
Tack på förhand!

Dold text

$lines = file('./Txt/answerN.txt', FILE_IGNORE_NEW_LINES)

iterera med

foreach ($lines as $row => $line) { kod här }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Arkade:

Jag är inte helt glassklar över vad du försöker göra men det är två saker som förbryllar mig med den andra loopen:

1.) Du sätter $i till 0, men ökar det aldrig i loopen.

2.) Du loopar igenom $fragor men jag ser ingen sån i koden, vilket borde betyda att den andra loopen inte körs. Hade den kört så borde (enligt mig i alla fall) alla rader ha samma värde eftersom du aldrig ökar $i

$i = 0; foreach($fragor as $value) { $var_2 = $scoreNo[$i] . "\r\n" ; fputs($fileN, $var_2); //skriv ut }

Var för snabb när jag skrev(ctrl c, ctrl v:)) Fragor är en array med frågor som jag includeerar från en annan fil, och ja glömde skriva ut i++ i foreach loopen

Permalänk
Medlem
Skrivet av Teknocide:

$lines = file('./Txt/answerN.txt', FILE_IGNORE_NEW_LINES)

iterera med

foreach ($lines as $row => $line) { kod här }

Tack för svar!
Du menar när jag ska läsa in eller när jag ska skriva ut?
Hänger inte riktigt med.

Edit: testade

foreach ($lines as $row => $line) { $var_2 = $scoreYes[$i] . "\r\n" ; fputs($fileY,$var_2); }

Det funkde engång, men när jag testade igen hade det blivit ett extra "hopp" mellan varje nummer.
först skrev den ut som jag ville tex:
2
4
5
7
3
Men sen när jag uppdaterade så blev det samma fel igen.
2

4

5

7

3

Permalänk

Hej du behöver bara använda \n efter varje och inte \r\n.

Permalänk
Medlem
Skrivet av granskog1:

Hej du behöver bara använda \n efter varje och inte \r\n.

Det blir ingen radbrytning om jag bara använder \n, allt skrivs ut på samma rad då

Permalänk
Medlem
Skrivet av Lofie:

Det blir ingen radbrytning om jag bara använder \n, allt skrivs ut på samma rad då

Radslut skrivs olika beroende på plattform.

Windows: \r\n
Unix/Linux: \n
Mac OS 9- (inte OSx, det använder Unix-konventionen): \r

Enklast verkar vara att använda konstanten PHP_EOL, vilket automatiskt ger rätt tecken oberoende av plattform.

Visa signatur

Kom-pa-TI-bilitet