Avatar billede dragonbook Nybegynder
02. april 2006 - 10:35 Der er 21 kommentarer og
2 løsninger

Hent array indhold fra en fil

Hej

Jeg har forsøgt at at finde ud af hvordan man henter indholdet fra en txt fil ind i en array.

Jeg har følgende:

<?php
$array_test = array(
'linie1',
'linie2'
);

Hvor jeg gerne vil havde at:

linie1
linie2

ligger i en txt fil og bliver læst ind fra filen og ind i array'en så det ser ud som i eksemplet, når siden loades.

Jeg har forsøgt mig med file() men kan ikke få det til at virke.

Nogen der kan hjælpe?
Avatar billede erikjacobsen Ekspert
02. april 2006 - 11:25 #1
Du skal kunne få det til at virke med file()
Avatar billede dragonbook Nybegynder
02. april 2006 - 11:33 #2
Jeg har prøvet at skrive

<?php
$array_test = file('test.txt');
echo $array_test
?>

og det eneste jeg får frem på skærmen er teksten: Array
Avatar billede whatever Nybegynder
02. april 2006 - 11:34 #3
Du kan ikke udskrive et array med echo.

Skriv i stedet print_r($array_test). Altså:

<?php
$array_test = file('test.txt');
print_r($array_test);
?>
Avatar billede dragonbook Nybegynder
02. april 2006 - 11:37 #4
Okay ja. nu ser det således ud:

Array ( [0] => linie1 [1] => linie2 )

Hvordan får jeg det til at komme ud på formen:

array(
'linie1',
'linie2'
);
Avatar billede michael_stim Ekspert
02. april 2006 - 11:41 #5
Du kan skrive:
echo "<pre>";
print_r($array_test);
echo"</pre>";

eller bruge en foreach og udskrive selve teksten.
Avatar billede michael_stim Ekspert
02. april 2006 - 11:44 #6
Men fatter ikke rigtigt hvad du vil? Hente en fil ind i et array og udskrive filen igen som tekstfil???
Avatar billede dragonbook Nybegynder
02. april 2006 - 11:45 #7
okay ja, nu er det nok mig der ikke har foklaret det godt nok.

Jeg laver kun en print_r på siden for at se om det ser rigtigt ud, scriptet jeg bruger skal nemlig modtage arrayen som:

array(
'linie1',
'linie2'
);

og ikke som:

Array(
[0] => linie1
[1] => linie2
)
Avatar billede dragonbook Nybegynder
02. april 2006 - 11:46 #8
jeg skal ikke udskrive den nogle steder men bare bruge det i et script.
Avatar billede whatever Nybegynder
02. april 2006 - 11:52 #9
Hvis du bare skal bruge array'et i dit script, er det eneste du skal gøre at indlæse filen med file().

<?php
$array_test = file('test.txt');
?>

I dit script benytter du så bare array'et $array_test.
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:03 #10
Ja det ville jeg jo også mene... men det gør det ikke og jeg tror det skyldes at array'en ikke kommer ud som dette:

array(
'linie1',
'linie2'
);

men i stedet som dette:

Array(
[0] => linie1
[1] => linie2
)


eller er jeg helt forkert på den ?
Avatar billede michael_stim Ekspert
02. april 2006 - 12:06 #11
Er det et phparray du skal bruge som et fx javascriptarray?
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:09 #12
øøøh det er rent php hvis det er det du mener.

helt præcist står der nu:

<?php
$array_test = array(
'linie1',
'linie2'
);

Det burde vel være muligt at læse en text fil ind så det står præcist ens. Eller kan man simpelthen ikke det ?
Avatar billede hmortensen Nybegynder
02. april 2006 - 12:10 #13
Så kan du vel gøre sådan her:

$phpArray = file("test.txt");
$jsArray = "array('".implode("', '", $phpArray)."');";
echo $jsArray;
Avatar billede hmortensen Nybegynder
02. april 2006 - 12:12 #14
Hvis du skal bruge det i ren php, skal du ikke bruge overstående, men kun file().

Prøv at vis hvor det går galt.
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:20 #15
Jeg bruger arrayen i et script der sender en mail til mig hvis der sker fejl på serveren, dog tester scriptet om der evt. er nogle sider den ikke skal sende en fejl meddelse om, disse sider står i den array jeg benytter.

Når arrayen står som:

$array_test = array(
'linie1',
'linie2'
);

er der ingen problemer, men ligger jeg siderne (filnavnene) i en txt fil og henter den med:
$array_test = file('test.txt');

sender den alligevel en fejl meddelelse, selv om siden optræder i txt filen.

Der kommer ikke nogle fejl beskeder eller ligende.

Men eftersom det virker fint ved at skrive arrayen direkte på siden går jeg ud fra at det er måden filen bliver hentet ind på der er problemet.
Avatar billede hmortensen Nybegynder
02. april 2006 - 12:24 #16
Så lad os se hvordan det ser ud reelt.

$arr = file("test.txt");
var_dump($arr);

Og smid så outputtet herind.
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:30 #17
output:

array(9) { [0]=>  string(41) "/forum/ " [1]=>  string(29) "/spil/spil.php " [2]=>  string(46) "/ar/ar1.php " [3]=>  string(61) "/ar/ar.php " [4]=>  string(53) "/ar/hp.php " [5]=>  string(21) "/oversigt.php " [6]=>  string(15) "/hjaelp.php " [7]=>  string(16) "/help.php " [8]=>  string(16) "/din.php" }
Avatar billede hmortensen Nybegynder
02. april 2006 - 12:36 #18
Som du kan se, er der mellemrum efter sidste tegn.
Burde virke sådan her:

$arr = array_map('rtrim', file('test.txt'));
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:40 #19
SÅDAN nu virker det helt perfekt :-)

Mange tak for hjælpen.

Jeg har lige lagt nogle flere point til spørgsmålet, så hvis I ligger et svar så fordeler jeg dem lidt, dog med flest til hmortensen da han fandt den endelig løsning.
Avatar billede hmortensen Nybegynder
02. april 2006 - 12:42 #20
Det var så lidt.

Er det en Windows server det kører på ?
Avatar billede whatever Nybegynder
02. april 2006 - 12:43 #21
Svar.
Avatar billede dragonbook Nybegynder
02. april 2006 - 12:53 #22
Nej det er en UNIX server
Avatar billede michael_stim Ekspert
02. april 2006 - 13:25 #23
Er ikke her for at tjene point, men for at hjälpe. Modtager kun point hvis jeg har bidraget med noget der er med til at löse problemet (hvilket jeg ikke har gjort her). Desuden lärer jeg mig også noget (på den ene eller anden måde ;o))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester