[PHP] Meerdere rijen met dezelfde eigenschap in 1 arrayrij

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DelTorro
  • Registratie: December 2004
  • Laatst online: 01-01-2024
Ik ben bezig met een OO-gevulde database met onder andere een (versimpelde) tabel met de volgende inhoud:
IDItemIDEigenschapIDWaarde
111 (Datum)2006-12-31
212 (Inhoud)Dit is nieuwsitem 1
321 (Datum)2007-01-01
422 (Inhoud)Dit is nieuwsitem 2

Nu wil ik graag de rijen met de overeenkomende eigenschap voor 'ItemID' in één rij van een array hebben die er dan bijvoorbeeld als volgt zou uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [0] => Array
        (
            [ID] => 1
            [Datum] => 2006-12-31
            [Inhoud] => Dit is nieuwsitem 1
        )

    [1] => Array
        (
            [ID] => 2
            [Datum] => 2007-01-01
            [Inhoud] => Dit is nieuwsitem 2
        )

)


Zo kan ik namelijk gemakkelijk alle nieuwsitems afdrukken in een HTML-template:
ItemIDDatumInhoud
12006-12-31Dit is nieuwsitem 1
22007-01-01Dit is nieuwsitem 2

Om dit alles te bereiken, heb ik eerst geprobeerd een MySQL-query op te stellen die de waarden van elke rij met een overeenkomende waarde voor 'ItemID' in 1 rij stopt. Uit een topic van november 2006 kon ik opmaken dat dat heel lastig wordt. Nu wil ik deze

Nu is mijn vraag: wat is nou de gemakkelijkste manier om ervoor te zorgen dat waarden van de rijen met een overeenkomstige eigenschap ('ItemID' in dit geval) in 1 arrayrij bij elkaar komen? Ik zal er rekening mee moeten houden dat andere objecten (bijvoorbeeld een gebruiker) niet 2 maar bijvoorbeeld 10 eigenschappen heeft.
Zelf dacht ik aan een while-lus die per rij controleert of het ItemID hetzelfde is als het ItemID van de vorige rij. Ik weet alleen niet zo goed hoe ik dit moet realiseren. Kan iemand me op weg helpen?

Acties:
  • 0 Henk 'm!

Verwijderd

Je haalt eerst alle eigenschappen op, gesorteerd op ItemID. Vervolgens ga je voor elke rij inderdaad kijken of de ItemID hetzelfde is als de vorige. Dat gaat ongeveer zo, aangenomen dat je alle rijen uit de database in een array $rows hebt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$lastItemID = null;
$currentRow = null;
$returnRows = array ();
foreach ( $rows as $row ) {
   if ( $row [ 'ItemID' ] != $lastItemID ) {
      $lastItemID = $row [ 'ItemID' ];
      if ( $currentRow ) {
         $returnRows [] = $currentRow;
      }
      $currentRow = array ( 'ID' => $row [ 'ItemID' ] );
   }
   $currentRow [ $row [ 'EigenschapID' ] ] = $row [ 'Waarde' ];
}
if ( $currentRow ) {
   $returnRows [] = $currentRow;
}

Dit is uiteraard even snel en uit de losse pols, en dus ongetest.

Acties:
  • 0 Henk 'm!

  • DelTorro
  • Registratie: December 2004
  • Laatst online: 01-01-2024
Bedankt Cheatah, dat 'even snel en uit de losse pols' werkt perfect.