[PHP/Smarty] Arrays geven problemen.

Pagina: 1
Acties:

Onderwerpen


  • tdw
  • Registratie: Augustus 2004
  • Laatst online: 01-10 17:46

tdw

Amai seg!

Topicstarter
Ik heb een probleem met php en/of smarty. Ik heb namelijk 2 arrays uit een database gehaald, namelijk één met gebruikersnamen en -id's, en één met auto's. Deze twee zijn aan elkaargelinkt via het gebruikersid, 'uid'.

Een deel van de array van de gebruikers is als volgt ($data):
code:
1
2
3
4
5
6
7
8
9
10
Array (37)
0 => Array (2)
  uid => "3"
  username => "user1 "
1 => Array (2)
  uid => "1"
  username => "user2"
2 => Array (2)
  uid => "2"
  username => "user3"


De auto-array ziet er als volgt uit ($cdata):
code:
1
2
3
4
5
6
7
8
Array (22)
1 => Array (1)
  23 => "Citroen AX"
3 => Array (2)
  1 => "Kever"
  5 => "Peugeot 3008"
5 => Array (1)
  2 => "Renault 19"

De array is als volgt opgebouwd:
1: userid, ofwel deze auto behoort bij user2
23: 'carid', deze heb ik nodig voor een linkje
Citroen ax: de auto waar het om gaat.

Ik krijg het alleen niet voor elkaar deze 2 arrays aan elkaar te linken in smarty:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{include file="header.tpl" title="Namen- en autolijst"}
                <h1>Namenlijst met auto's</h1>
                <table>
                    <tr>
                        <th>Nick</th>
                        <th>Auto('s)</th>
                    </tr>
                    {section name=list loop=$data}
                    <tr>
                        <td>{$data[list].username}</td>
                        <td>
                            {$cdata[{$data[list].uid}]}
                        </td>
                    </tr>
                    {/section}
                </table>
{include file="footer.tpl"}

Als het goed is zou er tussen de tweede <td></td> die in de section staat iets als 'Array' moeten komen te staan, echter krijg ik dan een smarty error dat de betreffende variabele niet bestaat.
Nested {section} en nested {foreach} werken hier dus niet, omdat de 'sorting key' in beide gevallen anders is. Het is niet mogelijk om de sorting key hetzelfde te maken, omdat sommige gebruikers geen auto hebben toegevoegd.
Wie kan mij helpen om dit probleem op te lossen?

Alvast bedankt,
Thijs

[ Voor 3% gewijzigd door tdw op 24-12-2009 20:38 ]

"There is that sort of assumption by the government that we're all driving around at 8 o'clock in the morning to be really annoying"
~ James May


  • tdw
  • Registratie: Augustus 2004
  • Laatst online: 01-10 17:46

tdw

Amai seg!

Topicstarter
Uiteindelijk is het opgelost. Met een foreach() heb ik een nieuwe array geschreven, die kon ik wél parsen met smarty. De array ziet er dan als volgt uit:
code:
1
2
3
4
5
6
0 => Array (
 'uid' = 3,
 'username' = user1,
 cars = array (
  23 = Citroen ax
))

en zo verder. Dit heb ik dan met smarty zo opgelost:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{include file="header.tpl" title="Namen- en autolijst"}
                <h1>Namenlijst met auto's</h1>
                <table>
                    <tr>
                        <th>Nick</th>
                        <th>Auto('s)</th>
                    </tr>
                    {section name=list loop=$data}
                    <tr>
                        <td>{$data[list].username}</td>
                        <td>
                            {foreach from=$data[list].cars key=carid item=car}
                            <a href="/car.php?id={$carid}">{$car}</a><br />
                            {foreachelse}
                            Deze gebruiker heeft nog geen auto toegevoegd.
                            {/foreach}
                        </td>
                    </tr>
                    {/section}
                </table>
{include file="footer.tpl"}

"There is that sort of assumption by the government that we're all driving around at 8 o'clock in the morning to be really annoying"
~ James May


Acties:
  • 0 Henk 'm!

  • MrNGm
  • Registratie: Augustus 2004
  • Laatst online: 03-10 20:49
Heuh, interessant, want dit *zou* wel met smarty moeten kunnen, hetzij op een niet bepaald elegante manier. Iets in de richting van dit...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{foreach from=$data key=num item=user}
  <tr>
    <td>{$user.username}</td>
    <td>
    {foreach from=$cdata key=uid item=car}
      {if $user.uid == $uid}
        {foreach from=$car key=cid item=name}
          <a href="/car.php?id={$cid}">{$name}</a><br />
        {/foreach}
      {/if}
    {/foreach}
    </td>
  </tr>
{/foreach}


Even uit het blote hoofd, maar dit zou in theorie ook moeten werken. Het combineren van de array in PHP, wat je nu doet, lijkt me overigens efficiënter, maar ik dacht, dit is ook wel een leuke oplossing.

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 10-10 08:02
uh... Je kunt toch gewoon 1 join query doen en dat resultaat aan smarty geven? Veel makkelijker dan allerlei dubbele loops draaien en andere minder fraaie oplossingen.

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 02:47
Dat soort dingen hoor je inderdaad in de database te doen en niet in PHP. Een database kan dat namelijk veel sneller door middel van optimalisaties en het gebruik van indices.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett