Avatar billede steenolsen1 Nybegynder
14. december 2005 - 22:58 Der er 18 kommentarer og
1 løsning

Skrive array til fil

Hej,

Jeg har et array, som jeg ønsker at skrive til en dynamisk genereret html fil. Det er ikke noget problem for mig, at lave filen, få skriverettigheder, og smide alt muligt ind i den - LIGE PÅNÆR dette array:

Array
(
    [varenavn] => Array
        (
            [0] => Vare 1
            [1] => Vare2
            [2] => Vare 3
        )

    [antal] => Array
        (
            [0] => 1.00
            [1] => 1.00
            [2] => 2.00
        )

    [pris] => Array
        (
            [0] => 4485.00
            [1] => 14495.00
            [2] => 2495.00
        )

    [prisTotal] => Array
        (
            [0] => 4485
            [1] => 14495
            [2] => 4990
        )

)

Har du et godt tip...?
Avatar billede jakobdo Ekspert
14. december 2005 - 22:59 #1
serialize()
Avatar billede jakobdo Ekspert
14. december 2005 - 23:00 #2
Når du mener skrive til fil, hvad mener du så?
Avatar billede steenolsen1 Nybegynder
14. december 2005 - 23:05 #3
Serialize? Hvordan vil du have det kørt ind over?

fwrite eller noget i den dur.
Avatar billede steenolsen1 Nybegynder
14. december 2005 - 23:06 #4
$string = "blabla";
$fil = fopen("filnavn.html");
fwrite($fil, $string);

Fungerer fint med andre variabler som $string, men ikke med arrayet.
Avatar billede jakobdo Ekspert
14. december 2005 - 23:09 #5
Det kommer lidt an på hvordan du ønsker at skrive det til html!
Hvordan skal det præsenteres på siden?
Altså en god måde at vise indholdet af et array i html er med:
echo "<pre>";
print_r($array);
echo "</pre>";

Så det kunne i dit tilfælde blive:
$string  = "<pre>";
$string .= print_r($array,true);
$string .= "</pre>";
$fil = fopen("filnavn.html");
fwrite($fil, $string);
Avatar billede steenolsen1 Nybegynder
14. december 2005 - 23:12 #6
Det dur desværre ikke, for jeg vil gerne have det ind i en table

<tr>
<td>[varenavn][0]</td>
<td>[antal][0]</td>
<td>[pris][0]</td>
<td>[prisTotal][0]</td>
</tr>
<tr>
<td>[varenavn][1]</td>
<td>[antal][1]</td>
<td>[pris][1]</td>
<td>[prisTotal][1]</td>
</tr>
<tr>
<td>[varenavn][2]</td>
<td>[antal][2]</td>
<td>[pris][2]</td>
<td>[prisTotal][2]</td>
</tr>
Avatar billede jakobdo Ekspert
14. december 2005 - 23:14 #7
Det var der jo ingen som snakkede om! :o)
Avatar billede steenolsen1 Nybegynder
14. december 2005 - 23:15 #8
No - sorry :-)

Troede bare, at det vil "være det samme" om det var med <tr>... eller ej :-)
Avatar billede jakobdo Ekspert
14. december 2005 - 23:20 #9
Ikke helt!
Men kan ikke lige samle tankerne om en løsning nu, så jeg må evt kigge på det i morgen, hvis ingen byder sig.
Avatar billede steenolsen1 Nybegynder
14. december 2005 - 23:23 #10
Ok

Prøvede lige noget, som i det mindste fik smidt dataene ind i filen - ikke korrekt, men i det mindste kom de ind:

        for($i=0;$i<=$AntVarer;$i++) {
            $String = '
            <tr><td>'.$VarekurvData['varenavn'][$i].'</td>
            <td>'.$VarekurvData['antal'][$i].'</td>
            <td align=right>'.$VarekurvData['pris'][$i].'</td>
            <td align=right>'.$VarekurvData['prisTotal'][$i].'</td></tr>
            ';
            fwrite($OrdreFil, $String);
        }

Hvis du smutter nu, så må du jo sove godt.... og tak for indsatsen :-)
Avatar billede fixxxer Nybegynder
14. december 2005 - 23:58 #11
Umiddelbart kan jeg ikke se logikken i måden dit array er struktureret, og måden du vil outputte til HTML.

Det ville nu være mere logisk hvis dit array fx stod sådan her:

Array
(
    [0] => Array
        (
            ['varenavn'] => Vare 1
            ['antal'] => 1.00
            ['pris'] => 4485.00
        )
)

og så:


for($i=0;$i<sizeof($VarekurvData);$i++)
{
  $output = '<tr>'
            <td>'.$VarekurvData[$i]['varenavn'].'</td>
            <td>'.$VarekurvData[$i]['antal'].'</td>
            <td>'.$VarekurvData[$i]['pris'].'</td>
            <td>'.($VarekurvData[$i]['antal'])*($VarekurvData[$i]['pris']).'</td>
            </tr>';
}


Og så har vi endda regnet total automatisk ud..

Det var en, ifølge min mening, klart bedre måde at gøre det på, men det afhænger også lidt af hvordan din øvrige backend er skrevet..
Avatar billede steenolsen1 Nybegynder
15. december 2005 - 07:25 #12
Hej Fixxxer. Tak for indlægget. Jeg har også selv regnet totalbeløbet ud i den whileløkke, der laver arrayet, men som ikke er posted her - ellers tak :-)

$VarekurvData = array();
include("admin/connect.php");
$q_VarekurvHtml = mysql_query("SELECT * FROM varekurv WHERE ordrenr = '".$alinfo['ordrenr']."'");
$AntVarer = mysql_num_rows($q_VarekurvHtml);
$i = 0;
while($VarekurvHtml = mysql_fetch_assoc($q_VarekurvHtml)) {
    // Henter varenavn
    $q_VareNavn     = mysql_query("SELECT * FROM varer_flex WHERE vareid = '".$VarekurvHtml['vareid']."'");
    $VareNavn     = mysql_fetch_assoc($q_VareNavn);
    $VarekurvData[$i]['varenavn']     = $VareNavn['varenavn'];
    $VarekurvData[$i]['antal']     = $VarekurvHtml['antal'];
    $VarekurvData[$i]['pris']     = $VarekurvHtml['pris'];
    $VarekurvData[$i]['prisTotal']     = ($VarekurvHtml['antal']*$VarekurvHtml['pris']);
}

Der kan jeg bare kun udskrive en record.... Formodentlig fordi tingene overskriver hinanden :-( Hvis jeg istedet ændrer [$i] til [], så bliver arrayet bare til
[1]
[2]
[3]
....

Kan du følge mig?
Avatar billede fixxxer Nybegynder
15. december 2005 - 08:55 #13
$VarekurvData = array();
include("admin/connect.php");
$q_VarekurvHtml = mysql_query("SELECT * FROM varekurv WHERE ordrenr = '".$alinfo['ordrenr']."'");
$AntVarer = mysql_num_rows($q_VarekurvHtml);
$i = 0;
while($VarekurvHtml = mysql_fetch_assoc($q_VarekurvHtml)) {
    // Henter varenavn
    $q_VareNavn    = mysql_query("SELECT * FROM varer_flex WHERE vareid = '".$VarekurvHtml['vareid']."'");
    $VareNavn    = mysql_fetch_assoc($q_VareNavn);
    $VarekurvData[$i]['varenavn']    = $VareNavn['varenavn'];
    $VarekurvData[$i]['antal']    = $VarekurvHtml['antal'];
    $VarekurvData[$i]['pris']    = $VarekurvHtml['pris'];
    $VarekurvData[$i]['prisTotal']    = ($VarekurvHtml['antal']*$VarekurvHtml['pris']);
i++;
}

Du skal manuelt forøge $i med en for hver gang du gennemløber et nyt array i while(), eller er $i = 0 hele tiden, og overskrider derfor dine forrigere varer i arrayet..
Avatar billede steenolsen1 Nybegynder
15. december 2005 - 09:35 #14
Ja selvfølgelig... åha - det vidste jeg jo egentlig godt...

So far so good. Nu får jeg ihvertfald den rigtige sortering - tester lige lidt videre :-)
Avatar billede steenolsen1 Nybegynder
15. december 2005 - 09:40 #15
Har nu følgende:

while($VarekurvHtml = mysql_fetch_assoc($q_VarekurvHtml)) {
    // Henter varenavn
    $q_VareNavn     = mysql_query("SELECT * FROM varer_flex WHERE vareid = '".$VarekurvHtml['vareid']."'");
    $VareNavn     = mysql_fetch_assoc($q_VareNavn);
    $VarekurvData[$i]['varenavn']     = $VareNavn['varenavn'];
    $VarekurvData[$i]['antal']     = $VarekurvHtml['antal'];
    $VarekurvData[$i]['pris']     = $VarekurvHtml['pris'];
    $VarekurvData[$i]['prisTotal']     = ($VarekurvHtml['antal']*$VarekurvHtml['pris']);
    $i++;
}

Bare lige for at gøre det endnu mere kryptisk (sorry), så har jeg endnu en "varekurv" (varekurv_konf), der indeholder alle konfigurationer der måtte være tilkoblet den enkelte vare:
Varenavn ABC  // varens navn
- Ekstra RAM  // tilkøb
- Større HD  // tilkøb

Det skal jeg have flettet ind i på en eller anden måde.... Hvad siger du til den?
Avatar billede steenolsen1 Nybegynder
15. december 2005 - 09:41 #16
Jeg forestiller mig, at der skal smides et opslag i varekurv_konf ind i whileløkken, og dataene derefter skal skrives til arrayet, er det ikke rigtigt?
Avatar billede fixxxer Nybegynder
20. december 2005 - 18:10 #17
Det kan jeg desværre ikke hjælpe med..

Du får nok bedre hjælp hvis du opretter et nyt spørgsmål specifik til den problemstilling.


Indtil videre vil jeg tilladede mig, at svare på den opringelig beskrevne opgave..
Avatar billede steenolsen1 Nybegynder
21. december 2005 - 07:29 #18
Fair nok - tak for hjælpen :-)
Avatar billede fixxxer Nybegynder
21. december 2005 - 13:35 #19
Tak for point :)
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