Toon posts:

[PHP] Array probleempje

Pagina: 1
Acties:
  • 47 views sinds 30-01-2008

Verwijderd

Topicstarter
Omdat mn vorige topic een slotje kreeg, omdat er werd aangenomen dat ik de array fout had en dat ik het wel zou kunnen oplossen wat me dus niet lukte plaats ik hier voor het laatst mn nieuwe vraag. Ik ben er niet uitgekomen met php manual en verschillende boekwerken die ik heb.

Het probleem:
$files heeft de waarde 'Array' en is dus niet goed, het moet de naam van een file bevatten, zelf ben ik al enige tijd bezig om het uit te vogelen en kom er echt niet uit, wellicht iemand die een oplossing heeft of kan zeggen wat ik fout doe?


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$files = array();
    while ($file = readdir($dir)) {
        $localpath = $dirpath.$file;

        if (is_file($localpath)) {
        $key = filemtime($localpath).md5($file);
        $files[$key] = $file;
        }
    }

    krsort($files);

    while($count <= count($files)){ 
            
    if (($count >= $min) AND ($count <= $max)){ 
        
        $file = $files[$count];

        echo $files; //waarde array is dus niet goed
        echo $count; //waarde getal is dus goed
        echo $file; //leeg

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-08 19:22
Wat krijg je te zien als je het volgende doet?
PHP:
1
2
3
<?php
  print_r($files);
?>

Verwijderd

Topicstarter
Sybr_E-N schreef op 19 July 2003 @ 16:33:
Wat krijg je te zien als je het volgende doet?
PHP:
1
2
3
<?php
  print_r($files);
?>
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Array ( [105862078400bfb9a27a79df386475a15d55d5a30f] => cheetah.bmp 

[105862075977375c38c33a1ae4d5f8a3d6998059d6] => konijn-getekend.bmp 

[10586207561d7576b40487298ff11da5ed6ca0f8f5] => cow-dichtbij.bmp 

[105862075473d300df22866b7d058ad211fc140d37] => cat-full.bmp 

[10586142401d704f8177680daae220650d6926e5cd] => tijger.jpg 

[10586142279f68d3923c0638da0dc49533c8a2eb97] => kat-glas.jpg 

[1058558134afdbe290ee109d48d94b73da8516d400] => struisvogel.jpg 

[1058558133c31aa1c27a06990c57d3071c0cb80814] => kameel.jpg 

[1058525867d10dee10cf420e2ca41d97fba4550883] => duck.gif 

[1058525726c472378009aa8353d488712f5e6f799b] => forthebirds.jpg 

[1058525724af4cac762f2868bc1c60295aa65114fa] => ratje.jpg 

[10585257227e6f570aac9618ba1a4e5e347eb43e0d] => flinder.jpg )


voor het gemak in php-code gezet, en wat enters gegegeven omdat het eigenlijk een lange regel is.[/quote]

[ Voor 6% gewijzigd door Verwijderd op 19-07-2003 16:39 ]


Verwijderd

Topicstarter
-dubbelpost-

[ Voor 99% gewijzigd door Verwijderd op 19-07-2003 16:39 . Reden: dubbelpost ]


  • Marcj
  • Registratie: November 2000
  • Laatst online: 21-08 21:30
Wat je nu probeert is files[0] te gebruiken. Maar deze bestaat niet! Wat je wel kunt proberen is foreach gebruiken...

Verwijderd

Topicstarter
Marcj schreef op 19 July 2003 @ 16:40:
Wat je nu probeert is files[0] te gebruiken. Maar deze bestaat niet! Wat je wel kunt proberen is foreach gebruiken...
foreach is uitgesloten, heb perse de while lus nodig, omdat alles gedeeld wordt over pagina's en afgebroken moet worden per x-aantal op een regel.

is het niet op te lossen, met die array?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Waarom wil je in godsnaam hashes als keys en vervolgens daar op sorteren?!

Maar goed, je oplossing is natuurlijk over de keys te itereren. Zoiets dus:
PHP:
1
2
3
$keys = array_keys($files);
for($i = 10; $i < 20; ++$i)
    echo $files[$keys[$i]];

  • Dezjay
  • Registratie: Oktober 1999
  • Laatst online: 19-08 15:16
Verwijderd schreef op 19 juli 2003 @ 16:42:
[...]


foreach is uitgesloten, heb perse de while lus nodig, omdat alles gedeeld wordt over pagina's en afgebroken moet worden per x-aantal op een regel.

is het niet op te lossen, met die array?
Dus.. dat kan toch ook wel?? Gewoon een $count bijhouden zoals je nu ook doet ;)

edit: Oeps, sorry Arnold... ik ben MarcJ ;)

[ Voor 7% gewijzigd door Dezjay op 19-07-2003 16:47 ]


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 21-08 09:50

Tjark

DON'T PANIC

ik snap nog niet helemaal wat je wil,
maar je wil iets dat alleen bv file 5-10 worden afgebeeld als min=5 en max=10 oid?

dan doe je toch

PHP:
1
2
3
4
5
$keys = array_keys($files); 
for($i=$min;$i<=$max;$i++) {        
    $file = $files[$keys[$i]];
    echo $file;
}



en idd: waarom doe je: krsort($files)
sorteren op MD5 hashkeys? wat voorn nut heeft dat?

[ Voor 16% gewijzigd door Tjark op 19-07-2003 16:54 ]

*insert signature here


Verwijderd

Topicstarter
Soultaker schreef op 19 July 2003 @ 16:44:
Waarom wil je in godsnaam hashes als keys en vervolgens daar op sorteren?!

Maar goed, je oplossing is natuurlijk over de keys te itereren. Zoiets dus:
PHP:
1
2
$keys = array_keys($files);
    echo $files[$keys[$i]];
bedankt! Dit werkt, alleen een klein minpuntje is dat hij de eerste overslaat....

Het script draait op: http://www.nixz.nl/photo/photo.php?gallery=Dieren
Zoals je ziet bij elke gallerij doet de laatste het niet (oftwel de eerste die in de array staat)

Ik heb wel ingesteld: $count = -1; dus beetje raar dat hij niet bij '0' begint...

[ Voor 35% gewijzigd door Verwijderd op 19-07-2003 17:07 . Reden: toevoeging site url ]


Verwijderd

Topicstarter
Zie commentaar //count...
Die '-10' moet '0' zijn maar is ie niet :'(
Ksnap er niks meer van. ;(

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    krsort($files);
//count is hier nog gewoon '-1'
    while($count <= count($files)){ 
//count is hier ineens '-10','1','2','3','4','5','6','7','8','9','10','11','12'  die -10 vind ik een beetje vreemd'.. :|
    if (($count >= $min) AND ($count <= $max)){ 
        $file_size = fileSize("$dirpath/$file"); 
        $file_size = round($file_size / 1000) . " Kb"; 
        
        $keys = array_keys($files); 

        $file = $files[$keys[$count]];
        echo ("<td>&nbsp;[img]'avatars/$gallery/$file'[/img]&nbsp;<br>&nbsp;&nbsp;$file_size<br><br></td>\n");
    }

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Is 'ie niet eerst "-1" (wat geen geldige array index is) en vervolgens "0" wat jij als "-10" leest? Is $min niet toevallig groter dan 0?

[ Voor 32% gewijzigd door Soultaker op 19-07-2003 17:45 ]


  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Ik snap er niks meer van en ik weet niet wat je uiteindelijke code is die niet werkt. Hieronder iets wat wel werkt, zonder overbodige (je schrijft er niks over na herhaaldelijk vragen door anderen?) MD5 hashes en andere kromme dingen. Neem niet klakkeloos over, bestudeer de logica van de code goed en leer ervan!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$MIN = 0;
$MAX = 5;
$Dir = 'c:/Documents and Settings/Erik-Jan Vos/Mijn documenten/Pix';
$URI = 'file:///c:/Documents and Settings/Erik-Jan Vos/Mijn documenten/Pix';
$Files = Array();

$DirHandle = OpenDir($Dir);
while ($File = ReadDir($DirHandle)) {
  if (Is_File($Dir.'/'.$File))
    $Files[] = Array(FileMTime($Dir.'/'.$File), $File);
}

Sort($Files); //Pakt het eerste element in array, dus de FileMTime()

for ($i=$MIN; $i<=$MAX; $i++) {
  $File = $Files[$i];
  $FileSizeStr = (string) Round(FileSize($Dir.'/'.$File[1]) / 1000);
  print '[img]"'.$URI.'/'.$File[1].'"[/img]<br/>'.$FileSizeStr.' kB<hr/>';
}
?>

Je had het geluk dat ik zelf ook ff zoiets wilde klussen.

[ Voor 10% gewijzigd door Erik Jan op 19-07-2003 17:56 . Reden: inspringen ]

This can no longer be ignored.


Verwijderd

Topicstarter
Soultaker schreef op 19 July 2003 @ 17:44:
Is 'ie niet eerst "-1" (wat geen geldige array index is) en vervolgens "0" wat jij als "-10" leest? Is $min niet toevallig groter dan 0?
Hij is in de code:
PHP:
1
2
3
$count = -1; //gewoon een variable
$min = (1+($page * 12));  //12 is het aantal plaatjes per pagina,
$max = (($page +1) * 12);


Naja dit is de hele code, misschien dat het zo duidelijker is:
Resultaat staat op: http://www.nixz.nl/photo/photo.php
Het werkt volledig, behalve dat hij het laatste plaatje (eerste in de array) niet toont.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php

$woord="photo"; // naam vd php file 
$path2 = "avatars/$gallery"; // dir waar foto's in staan
$title = "$gallery - Pagina ". ($page + 1); 
// header, dit staat boven de plaatjes. 
$header = "<br><br>$gallery"; 

// Configuratie 
$clm = "4"; // Aantal kolommen 
$rows = "3"; // aantal rijen 
$t_w = "100"; 
$t_h = "100"; 

if ($gallery!="")

{
    echo "<br><br><br>";
    
    echo "<br><b><h2>$title</h2></b><br>"; 

    $min = (1+($page * 12)); 
    $max = (($page +1) * 12); 
    $number = $clm * $rows; 
    $beak = (($page * 12) + $clm); 
    echo "<table border=0 cellpadding=0 cellspacing=0><tr>"; 
    $d = dir("$path2");
    $count = -1;

// dir lezen en naar array
       
    $dirpath = getcwd() . "/" .$path2 . "/";
    $dir = opendir($dirpath);
    $files = array();
    while ($file = readdir($dir)) {
        $localpath = $dirpath.$file;

        if (is_file($localpath)) {
        $key = filemtime($localpath).md5($file);
        $files[$key] = $file;
        }
    }

// rksort() sorteren op !key

    krsort($files);

    while($count <= count($files)){     

    if (($count >= $min) AND ($count <= $max)){ 
        $file_size = fileSize("$dirpath/$file"); 
        $file_size = round($file_size / 1000) . " Kb"; 
        
        $keys = array_keys($files); 

        $file = $files[$keys[$count]];
        echo ("<td>&nbsp;[img]'avatars/$gallery/$file'[/img]&nbsp;<br>&nbsp;&nbsp;$file_size<br><br></td>\n");
    }       
        

    if ($count == $break){ 
    echo "</tr>\n<tr>\n"; 
    $break = $count + $clm ; 
    } 
    
    $count++; 
    } 

    echo "</tr></table>"; 
    
    $pages = ($count / 12); 
    
    $pageplus = ($page + 1); 
    
    $pagemin = ($page - 1); 
    
    if (($page + 1) < $pages){ 
    
        $volgende = " | <a href=$woord.php?gallery=$gallery&page=$pageplus>Volgende " . ($clm * $rows) . " Plaatjes</a> |";  //($clm * $rows)
                //  "  | <a href=$woord.php?gallery=$gallery&page=$pageplus>Next 20 Pictures</a> |"; 
    } 
    
    if (($page+1) > "1"){ 
    
        $vorige = "| <a href=$woord.php?gallery=$gallery&page=$pagemin>Vorige " . ($clm * $rows) . " Plaatjes</a> |"; 
                //  "| <a href=$woord.php?gallery=$gallery&page=$pagemin>Previous 20 Pictures</a> |"; 
    } 

    // Footer, dit staat onder de plaatjes. 
    echo "$vorige $volgende<br><br><br>Copyright © 2003 by NiXz<br>"; 
    
} else {
    ?>
    <!-- //echo "<br><br><br><br><br><h2>Deze pagina bestaat niet!</h2>jammer he!"; -->
        <div id="beginscherm">
            <br><br><br>
            <h2>Welkom bij mijn verzameling MSN schermafbeeldingen</h2>
            <h3>Dagelijks nieuwe afbeeldingen van hoge kwaliteit!</h3>
            
      <hr width="90%">
        </div>
    
<?php
} 
?>

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Verwijderd schreef op 19 July 2003 @ 19:02:
Hij is in de code:
PHP:
1
2
3
$count = -1; //gewoon een variable
$min = (1+($page * 12));  //12 is het aantal plaatjes per pagina,
$max = (($page +1) * 12);
Beetje lezen, he! Ik zeg nog duidelijk: misschien is $min groter dan 0? En inderdaad; als ik aanneem dat page tenminste 0 is, zal $min altijd groter dan 0 zijn en wordt het plaatje op array index 0 (het eerste plaatje) nooit weergegeven.

Ik vind trouwens nog steeds dat je dit soort dingen zelf wel uit mag zoeken! Doe je dat niet, dan kun je toch tenminste mijn suggesties doorlezen voordat je er weer een stuk code neerplempt met het ongeschreven verzoek het maar voor je te fixen...

Verwijderd

Topicstarter
Soultaker schreef op 19 juli 2003 @ 21:45:
[...]

Beetje lezen, he! Ik zeg nog duidelijk: misschien is $min groter dan 0? En inderdaad; als ik aanneem dat page tenminste 0 is, zal $min altijd groter dan 0 zijn en wordt het plaatje op array index 0 (het eerste plaatje) nooit weergegeven.

Ik vind trouwens nog steeds dat je dit soort dingen zelf wel uit mag zoeken! Doe je dat niet, dan kun je toch tenminste mijn suggesties doorlezen voordat je er weer een stuk code neerplempt met het ongeschreven verzoek het maar voor je te fixen...
Sorry, had het wel gezien dat $min groter was dan 0, en klopte ook maar niet echt iets meegedaan, drong niet echt door :| Nu begrijp ik het pas en ga ik kijken of ik eruit kom.

Zal nu weer liev zijn :)

Verwijderd

Topicstarter
Heb er nog mee gevogeld maar met die $min klopt toch niet, ik heb er oa. van gemaakt $min=0, $min=-1. $min=1, maar niks wat iets goeds oplevert. (dat wel alles toont zonder error) Als iemand het mocht willen voorkouwen zou ik er erg blij mee zijn, ben er al een hele dag mee bezig en ben er nu zo dichtbij en wil het nog niet lukken :( ben blij als alles werkt.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als het met trial and error niet lukt om een gewenst resultaat uit je programma te halen zul je toch moeten nadenken over hoe het wel moet.
hint:
-welke plaatjes wil je op pagina 1?
-welke op pagina 2?
-waar staan die plaatjes in de array?
-wat zijn dan de corresponderende indexen
-verzin daar een berekening voor

En wellicht is het handig om de reacties die je al gehad hebt nog eens goed door te lezen.

Deze gaat weer dicht en ik raad je aan om vanaf nu wat omzichtiger om te gaan met de hulp die je hier krijgt.

Who is John Galt?

Pagina: 1

Dit topic is gesloten.