[PHP] Dubbele 'foreach', of andere oplossing?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MpDay
  • Registratie: Juni 2000
  • Laatst online: 30-08 23:25
Hoi,


Ik ben bezig met een php script dat voor mij een foto pagina in elkaar gaat draaien.
Ik heb een map op m'n FTP waar foto's in staan. In diezelfde map staat een .txt bestand met de teksten (elke regel 1 tekst) die onder de foto's moet komen te staan, stuk voor stuk, dus:

foto1
tekst1

foto2
tekst2

etc...

Daarbij moeten de foto's eerst op alfabet gesorteert worden.

tot nu toe heb ik de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// map openen, foto's lezen
    $handle=opendir(".");
    while (($foto = readdir($handle)) != false)  
    {
      if (($foto != ".") && ($foto != "..")) 
      {
    $alfabet=($foto);
    $fotoarray[$foto]=$alfabet;
      }
    }
closedir($handle);

//foto's sorteren op alfabet
asort ($fotoarray);

//tekst file inlezen... daarna met 'foreach' onder de foto's zetten
$tekst_file = file('tekst_1.txt');

//dubbele 'foreach', want hij moet foto1 en tekst1 weergeven; dit werkt niet!
foreach (($fotoarray as $foto => $alfabet) && ($tekst_file as $regel_tekst))
    
    {

    if (eregi("_1", $foto))
        {

        echo "<p align=\"center\">[img]\"$foto\"><br>\n";
        echo[/img]\n";

        }
     } 

?>


Jullie zien het probleem: ik probeer een dubbeke 'foreach' uit te voeren :) Maar da wil 't scriptje niet.
met alleen $foto of $regel_tekst werkt het prima, maar niet als ik ze allebei tegelijk wil laten zien, zoals nu.
Ik dacht dat het met '&&' wel zou lukken.

Hoe kan ik dit het best oplossen?

Tnx MP

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

je kunt toch ook een index bijhouden en daarmee, bij elke iteratie, het volgende element in $tekst_file opvragen? Of gewoon de each () functie oid

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MpDay
  • Registratie: Juni 2000
  • Laatst online: 30-08 23:25
Heb zojuist ongeveer 8x je reply gelezen, maar hij dringt nog niet helemaal door...
Ben namelijk pas 2 weken met PHP bezig, vandaar.

Wat is een iteratie? je bedoelt volgens mij die 'foreach' loop?
...en daarmee, bij elke iteratie, het volgende element in $tekst_file opvragen?
Ja, precies, dat is uiteindelijk de bedoeling, maar hoe vraag je dat 'volgende' element dan op als het met foreach niet werkt?

[ Voor 4% gewijzigd door MpDay op 03-11-2003 22:11 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Wat dacht je hiervan (ongeteste code)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
// map openen, foto's lezen
    $handle=opendir(".");
    while (($foto = readdir($handle)) != false)  
    {
      if (($foto != ".") && ($foto != "..")) 
      {
    $fotoarray[$foto]=false
      }
    }
closedir($handle);

//foto's sorteren op alfabet
ksort ($fotoarray);

//tekst file inlezen... daarna met 'foreach' onder de foto's zetten
$fp = fopen('text_1.txt',"r");
$text = '';
while (!eof($fp)) {
     $text .= fgets($fp);
}
fclose($fp);
// aanname, lege regels bevatten geen spaties of tabs
$text = str_replace("\r\n","\n", $text);
$text = str_replace("\r","\n", $text);
$ar = explode("\n\n",$text); // elke array entry bevat nu een fotolocatie met description gescheiden door \n
foreach ($ar as $val) {
    $aFotoText = explode("\n",$val);
    if (isset($aFotoText[1])) {
         $fotoarray[$aFotoText[0]] = $aFotoText[1];
    } else {
         $fotoarray[$aFotoText[0]] = ''; // No description
    }
}

foreach ($fotoarray as $foto => $description) {
    echo "<p align=\"center\">[img]\"$foto\"><br>\n";
[/img]\n";
}

?>


edit:

misschien is wat uitleg op z'n plek. Het probleem van jou kan op meerdere manieren opgelost worden waarvan bovenstaande er slechts 1 is.

Ik lees de hele foto description file in en doe wat handelingen zodat het crossplatform werkt. Dat betekend dat ik een file overhoudt waarbij elke regel netjes op \n eindigt.

Daarna maak ik van die file een array met de wetenschap dat elke entry gescheiden wordt door \n\n. Elke array entry bevat nu zowel een foto locatie als een omschrijving gescheiden door \n.

De omschrijving wordt vervolgens weer aan je eerder ontvangen array gehangen waardoor je nu een nette array krijgt waarbij de arrat key in dit geval de foto locatie is en de array value de foto omschrijving.

[ Voor 67% gewijzigd door stekkel op 03-11-2003 22:34 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

MpDay schreef op 03 november 2003 @ 22:11:
Heb zojuist ongeveer 8x je reply gelezen, maar hij dringt nog niet helemaal door...
Ben namelijk pas 2 weken met PHP bezig, vandaar.

Wat is een iteratie? je bedoelt volgens mij die 'foreach' loop?
een iteratie is een keer dat de lus wordt doorlopen. Ik bedoelde dus zoiets

PHP:
1
2
3
4
5
6
7
$i = 0;
foreach ($array1 as $k => $v)
{
    $a = $array2[$i];
    $i++;
    // ...
}


of nog makkelijker, met de each () functie:

PHP:
1
2
3
4
5
foreach ($array1 as $k => $v)
{
    $a = each ($array2);
    // ...
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.