[Smarty] array uitlezen werkt niet goed

Pagina: 1
Acties:
  • 292 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Ik werk sinds kort met Smarty en het lukt niet om tot het juiste resultaat te komen in mijn template.

Ik heb deze array die verwerkt moet worden in het template:

Array
(
[0] => Array
(
[kaartnaam] => 2m Temperatuur
[0] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs034.gif
[khtekst] => 03
)

[1] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs064.gif
[khtekst] => 06
)

[2] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs094.gif
[khtekst] => 09
)

[3] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs124.gif
[khtekst] => 12
)

)

[1] => Array
(
[kaartnaam] => cape - lifted index
[20] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs036.gif
[khtekst] => 03
)

[21] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs066.gif
[khtekst] => 06
)

[22] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs096.gif
[khtekst] => 09
)

[23] => Array
(
[khhref] => http://www.wetterzentrale.de/pics/Rmgfs126.gif
[khtekst] => 12
)

)
)

Uiteindelijk in het template zal het resultaat moeten zijn:

2m Temperatuur
03 06 09 12

cape - lifted index [kaartnaam]
03 06 09 12

Waarbij de cijfers [khtekst] een link zijn [khhref]

Wat er gebeurt in het template is dat de kaartnaam 2 keer verschijnt.

het resultaat ziet er zo uit:

2m Temperatuur
2 03 06 09 12

cape - lifted index [kaartnaam]
c 03 06 09 12

Er wordt dus 1 waarde teveel geprint, namelijk de 1e letter van [kaartnaam] net voor de cijfers.

Dit is mijn template code:
{foreach from=$data key=i item=d}
{$d.kaartnaam}
{foreach from=$d key=kid item=nd}
{$nd.khtekst}
{/foreach}
{/foreach}

$data is bovenstaande array

Wie kan mij helpen om de array op de juiste wijze uit te lezen? Met de smarty.net foreach info kom ik er niet uit.

Acties:
  • 0 Henk 'm!

  • martin149
  • Registratie: Augustus 2009
  • Laatst online: 10-09 08:19
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Array
(
    [0] => Array
        (
            [kaartnaam] => 2m Temperatuur
            [0] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs034.gif
                    [khtekst] => 03
                )

            [1] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs064.gif
                    [khtekst] => 06
                )

            [2] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs094.gif
                    [khtekst] => 09
                )

            [3] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs124.gif
                    [khtekst] => 12
                )

        )

    [1] => Array
        (
            [kaartnaam] => cape - lifted index
            [20] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs036.gif
                    [khtekst] => 03
                )

            [21] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs066.gif
                    [khtekst] => 06
                )

            [22] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs096.gif
                    [khtekst] => 09
                )

            [23] => Array
                (
                    [khhref] => http://www.wetterzentrale.de/pics/Rmgfs126.gif
                    [khtekst] => 12
                )

        )
)

iets duidelijker

ik zie ook geen fout...
misschien gewoon de eerste ooverslaan, zal dit wel doen omdat de eerste waarde in de array geen [khtekst] heeft en er dus gewoon de 1e letter van pakt.

Acties:
  • 0 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 16:01

samo

yo/wassup

code:
1
{foreach from=$d key=kid item=nd}

moet zijn:
code:
1
{foreach from=$d.0 key=kid item=nd}


Bij "from=$d" wordt [kaartnaam] ook meegenomen als array. $d.kaartnaam[0] is de eerste letter van de string.

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
1. Je doet helemaal niets met de key, heb je die later wel nodig? anders kan je ook gewoon {foreach from=$data item=dataValue} doen.

2. Je gaat inderdaad met een foreach over je sub array's die neemt ook het eerste "kaartnaam" element mee. Als je die kaartnaam als element wilt dan zal je iets moeten doen als {if $key != "kaartnaam"} (uit mijn hoofd)
Je kan ook die kaartnaam verplaatsen naar je key van de hogere array. Dan krijg je dus als top array:
PHP:
1
2
3
4
5
6
7
8
$data = array(
    "2m Temperatuur" => Array (
        ...
    ),
     "cape - lifted index" => array (
        ...
    )
);
Al ben ik niet zo voor associatieve array's ivm de snelheid.

Wat hierboven staat kan natuurlijk ook. Al is het beter om data die niet bij elkaar hoort ook te scheiden van elkaar.

[ Voor 5% gewijzigd door kluyze op 24-05-2010 11:42 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

En voor de volgende keer Geef aub aan wat je zelf al hebt geprobeerd en wat daar niet mee lukte. Alleen aangeven "ik kom er niet uit en dit is mijn code" is niet voldoende hier. Iemand die hier al zo lang rondloopt weet dat echt wel ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Dit topic is gesloten.