[PHP] door array heen wandelen en index bepalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer door een array heen te wandelen voor een vorige - volgende button maar ik zie iets over het hoofd.

Ik heb een multidemensionale array bijv:

Array
(
[3] => Array
(
[id] => 3
[cat_id] => 9
[description] => Hier dan een beschrijving
[date_ne] => 27-12-2006 om 14:48
[cat_name] => Porsche boxtor
[images] => Array
(
[image_big] => Array
(
[image_name] => images/3_big.jpg
[image_width] => 640
[image_height] => 437
)

[image_small] => Array
(
[image_name] => images/3_small.jpg
[image_width] => 150
[image_height] => 102
)

)

)

[4] => Array
(
[id] => 4
[cat_id] => 9
[description] => asdasdas
[date_ne] => 27-12-2006 om 16:14
[cat_name] => Porsche boxtor
[images] => Array
(
[image_name] => Array
(
[image_name] => images/4_cat_cat.jpg
[image_width] => 200
[image_height] => 125
)

[image_big] => Array
(
[image_name] => images/4_big.jpg
[image_width] => 800
[image_height] => 521
)

[image_small] => Array
(
[image_name] => images/4_small.jpg
[image_width] => 150
[image_height] => 98
)

)

)

[5] => Array
(
[id] => 5
[cat_id] => 9
[description] => motor
[date_ne] => 27-12-2006 om 16:41
[cat_name] => Porsche boxtor
[images] => Array
(
[image_big] => Array
(
[image_name] => images/5_big.jpg
[image_width] => 800
[image_height] => 533
)

[image_small] => Array
(
[image_name] => images/5_small.jpg
[image_width] => 150
[image_height] => 100
)

)

)

[6] => Array
(
[id] => 6
[cat_id] => 9
[description] => adasdasd<br /><br />leendert
[date_ne] => 27-12-2006 om 16:57
[cat_name] => Porsche boxtor
[images] => Array
(
[image_big] => Array
(
[image_name] => images/6_big.jpg
[image_width] => 640
[image_height] => 376
)

[image_small] => Array
(
[image_name] => images/6_small.jpg
[image_width] => 150
[image_height] => 88
)

)

)

)

en deze code:
code:
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
<?php
$photos =& $oPhoto->getPhotos(0, $_GET['cat']);
        $next = null;
        $prev = null;
        $countPhotos = count($photos);
        $count = 0;
       
        reset($photos);
        foreach ($photos as $key => $photo) {
            if ($key == $_GET['oid']) {
                if (next($photos))
                    $next = next($photos);
                if (prev($photos))
                    $prev = prev($photos);           
                printf('
                    <table>
                        <tr>
                            <tr>
                                <td>
                                    %s %s %s
                                </td>
                            </tr>
                            <td>
                            <img src="../../photoalbum/%s" alt="" />
                            </td>
                        </tr>
                    </table>
                    ',
                    ($count > 0) ? sprintf('<a href="?cat=%d&amp;oid=%d"><< vorige </a>', $_GET['cat'], $prev['id']) : '',
                    ($prev['id'] != $_GET['oid'] && $next['id'] != $_GET['oid']) ? ' | ' : '',
                    ($count < $countPhotos) ? sprintf('<a href="?cat=%d&amp;oid=%d">volgende >></a>', $_GET['cat'], $next['id']) : '',
                    $photo['images']['image_big']['image_name']
                );
                break;
            }
            $count++;
        }
?>

Wanneer ik bij de eerste photo op volgende klikt komt die bij index5 uit en hij slaat index4 dus over. als ik dan vanuit index5 terug doe gaat die weer naar 3 en de volgende knop staat er ook niet terwijl die er wel moet staan omdat index6 er nog achter staat.
Wat doe ik fout met prev() en next() ?

Acties:
  • 0 Henk 'm!

  • Recursio
  • Registratie: Mei 2006
  • Laatst online: 01-09 18:41
Zonder de moeite te nemen de enorme lap code door te spitten:

"if (next($photos))
$next = next($photos);"

de if-regel test of "next($photos)" waar is ("true" teruggeeft). Dit is het geval, maar dan is ook meteen de pointer verschoven en wijst al naar het volgende element. Met de regel na het if-statement "$next = next($photos);" doe je dit echter nog een keer. Misschien doet

"if (next($photos))
$next = $photos;"
wat je wil?

Dan is het trouwens nog steeds niet echt nette code.

[ Voor 30% gewijzigd door Recursio op 27-12-2006 18:24 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Misschien wil je overwegen van het "array" gebeuren af te stappen, en dit opnieuw om te zetten naar classes en die dan in een array/list zetten, wat onderhoudbaarheid beter ten goede kan komen. Je 'misbruikt' in zekere zin nu een array als struct wat inconsistentie nou ook niet bepaald tegengaat.

[ Voor 54% gewijzigd door prototype op 27-12-2006 18:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja ik kan het opzich wel in een classe zetten maar ik denk niet dat het echt nodig is.
Het is als volgt:

Ik krijg een array binnen met bijv. 6 foto's. De foto's horen bij een categorie.
Wanneer ik nu op 1 van die foto's klik verschijnt die in het groot maar dan moet je netzoals in Windows ook door de rest van die foto's kunnen dmv prev en next.

edit:

"if (next($photos))
$next = $photos;"
wat je wil?

nee dat had ik al geprobeert maar dat werkt net zo goed niet.

[ Voor 15% gewijzigd door Verwijderd op 27-12-2006 18:48 ]


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

PHP:
1
2
3
4
if (next($photos))
   $next = next($photos);
if (prev($photos))
   $prev = prev($photos);

Vervangen door:
PHP:
1
2
3
4
   $next = @next($photos);
   if (!$next) $next = null;
   $prev = @prev($photos);
   if (!$prev) $prev = null;


Je tabel structuur klopt ook niet. Rij in rij bijvoorbeeld.

[ Voor 10% gewijzigd door eghie op 27-12-2006 19:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@eghie

Nee dat werkt ook niet. Waarom is de tabel structuur hier niet ok? heb ondertussen al wel een andere structuur maar ik moet nog even op deze verder bouwen voor iemand.3

edit:
Heb het al werkend. Ik heb altijd gedacht dat een foreach) een next doet maar dus niet.
Ik heb nu onderaan de foreach een next($fotos) gezet en het werkt.

[ Voor 32% gewijzigd door Verwijderd op 27-12-2006 19:32 ]


Acties:
  • 0 Henk 'm!

  • Recursio
  • Registratie: Mei 2006
  • Laatst online: 01-09 18:41
Verwijderd schreef op woensdag 27 december 2006 @ 18:44:
Ja ik kan het opzich wel in een classe zetten maar ik denk niet dat het echt nodig is.
Het is als volgt:

Ik krijg een array binnen met bijv. 6 foto's. De foto's horen bij een categorie.
Wanneer ik nu op 1 van die foto's klik verschijnt die in het groot maar dan moet je netzoals in Windows ook door de rest van die foto's kunnen dmv prev en next.

edit:

"if (next($photos))
$next = $photos;"
wat je wil?

nee dat had ik al geprobeert maar dat werkt net zo goed niet.
Kun je iets specifieker zijn dan "dat werkt net zo goed niet."? Doet het PRECIES hetzelfde als je eigen code, of heeft het simpelweg niet het beoogde resultaat?
Pagina: 1