Smarty Forum Index Smarty
The discussions here are for Smarty, a template engine for the PHP programming language.
Mehrdimensionales Array

 
Post new topic   Reply to topic    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Tue Mar 12, 2013 4:18 pm    Post subject: Mehrdimensionales Array Reply with quote

Hallo,

ich übergebe folgendes Array an das Template:

Code:


Array
(
    [MIN(lage_objekt.entf_walking_value)] => Array
        (
            [0] => 754
            [1] => 860
            [2] => 820
        )

    [beschreibung] => Array
        (
            [0] => Market Germania, kleiner Supermarkt am Hafen für das Nötigste!
            [1] => Kleine Bäckerrei am Sportplatz
            [2] => Kleiner Kiosk für Getränke, Zigaretten usw.
        )
    [rubrik] => Array
        (
            [0] => Einkaufen
            [1] => Einkaufen
            [2] => Trinken
)



mit

Code:

$smarty->assign('arr_entf', $arr_entf);


Wie komme ich nun mit EINER Schleife an die Werte aus dem Array "beschreibung" oder auch "rubrik"? Mit

Code:
{foreach from=$arr_entf.rubrik item=v}
{foreach from=$v item=v2}
<li>{$v2}</li>
{/foreach}
{/foreach}


komme ich zwar an die Werte aber gibt es auch kürzere Methode? Des weiteren würde ich gerne nur die Werte aus $arr_entf.rubrik auslesen die als Wert "Einkaufen" beinhalten?

Bin für jeden Tipp dankbar...

Viele Grüße

inucbus
Back to top
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 107
Location: Germany

PostPosted: Wed Mar 13, 2013 9:09 am    Post subject: Reply with quote

Probier mal:

Code:

{foreach from=$arr_entf.rubrik item=v}
<li>{$arr_entf.rubrik.$v}</li>
{/foreach}


bzw. schau dir mal die Properties wie zum Beispiel @index oder @key an

http://www.smarty.net/docs/en/language.function.foreach.tpl
_________________
BASE4U - Deine Meinung ist Wichtig!
Back to top
View user's profile Send private message Visit poster's website
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Mon Apr 01, 2013 12:25 am    Post subject: Reply with quote

@Grizzly Danke für den Tip. Habe das jetzt allerdings ganz anders gelöst und habe wieder ein neues Array-Problem und wenn ich ehrlich bin, verstehe ich die ganze verschachtelete Array-Geschichte auch nicht wirklich. Bin dabei mich einzuarbeiten. Das Array sieht wie folgt aus:

Code:

Array
(
    [0] => Array
        (
            [objekt_id] => Array
                (
                    [0] => 91
                    [1] => 91
                    [2] => 91
                    [3] => 91
                    [4] => 91
                )

            [wohnungs_id] => Array
                (
                    [0] => 206
                    [1] => 207
                    [2] => 208
                    [3] => 209
                    [4] => 981
                )

            [typ] => Array
                (
                    [0] => A1
                    [1] => B1
                    [2] => C1
                    [3] => D1
                    [4] => D2
                )

            [bettenanzahl] => Array
                (
                    [0] => 2
                    [1] => 4
                    [2] => 4
                    [3] => 6
                    [4] => 6
                )

        )

)
Array
(
    [0] => Array
        (
            [objekt_id] => Array
                (
                    [5] => 100
                    [6] => 100
                    [7] => 100
                    [8] => 100
                    [9] => 100
                    [10] => 100
                )

            [wohnungs_id] => Array
                (
                    [5] => 234
                    [6] => 233
                    [7] => 231
                    [8] => 235
                    [9] => 236
                    [10] => 1909
                )

            [typ] => Array
                (
                    [5] => B2
                    [6] => B1
                    [7] => A1
                    [8] => B3
                    [9] => B4
                    [10] => C1
                )

            [bettenanzahl] => Array
                (
                    [5] => 4
                    [6] => 3
                    [7] => 2
                    [8] => 4
                    [9] => 3
                    [10] => 5
                )

        )

)
Array


Ich lese das Array nun aus:


Ich möchte nun nur TYP und WOHNUNGS_ID auslesen:

Code:

{foreach from=$arr_haus key=key item=item}
    <h2>OBJEKT_ID {$key}</h2>
    {foreach from=$item item=item2}
        {foreach from=$item2.typ item=item3}
        <h2>TYP {$item3}</h2>
        {/foreach}
    {/foreach}

{/foreach}


Wie funktioniert das? Ich kann zwar innerhalb der foreach-Schleife $item2.typ nur den TYP auslesen, aber ich möchte ja eher mit {$item3} darauf zugreifen um nicht noch eine Schleife für WOHNUNGS_ID erstellen zu müssen. Ich dachte da an {$item3.typ} und {$item3.wohnungs_id}! Allerdings klappt das nicht. Wo ist der Denkfehler?

Bin für jeden Tipp dankbar und euch allen noch einen frohen Ostermontag....
Back to top
View user's profile Send private message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Fri Apr 12, 2013 10:21 pm    Post subject: Reply with quote

Gelöst, mit einem sinnvollen Array klappt auch alles....
Back to top
View user's profile Send private message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Fri Apr 12, 2013 11:26 pm    Post subject: Reply with quote

Boah, wieder ein neues Problem und keine Lösung in Sicht. Wie greife ich denn mit einer Variable auf ein assoziatives Array?

Code:

{foreach from=$arr_haus key=key item=item}
     <h2>OBJEKT_ID {$item.0.objekt_id}</h2> <pre>{$item|print_r}</pre>
     <a href="/unterkunft/ferienwohnung/ferienhaus.php?objekt_id={$key}">Zum Ferienhaus</a>
     {foreach from=$item item=item2}
         <h2>Typ: {$item2.typ} Wohnungs_id: {$item2.wohnungs_id} Bettenanzahl: {$item2.bettenanzahl}</h2>
     {/foreach}
{/foreach}


{$item.0.objekt_id} funktioniert nicht. Wenn ich allerdings den richten Index angeben wie zum Beispiel: {$item.206.objekt_id} funktioniert es!?

$item|print_r gibt folgendes aus:

Code:

Array
(
    [objekt_id] => 91
    [objektname] => Ferienhaus Denis
    [ort] => Vranjica
    [kurzbeschreibung] =>
    [wohnungs_id] => 206
    [typ] => A1
    [gesamtpreis_hs] => 113
    [gesamtpreis_ns] => 91
    [gesamtpreis_ns2] => 75
    [bettenanzahl] => 2
)
Array
(
    [objekt_id] => 91
    [objektname] => Ferienhaus Denis
    [ort] => Vranjica
    [kurzbeschreibung] =>
    [wohnungs_id] => 207
    [typ] => B1
    [gesamtpreis_hs] => 173
    [gesamtpreis_ns] => 130
    [gesamtpreis_ns2] => 114
    [bettenanzahl] => 4
)


Hat jemand eine Idee. Habe schon alles durchprobiert und auch nichts in der Doku gefunden. Imho sollte doch $item[0].objekt_id funktionieren?

Viele Grüße
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4649
Location: Hamburg / Germany

PostPosted: Sat Apr 13, 2013 8:04 am    Post subject: Reply with quote

So ganz verstehe ich Deine Array Struktur immer noch nicht.

Was liefert ein $arr_haus|print_r ?
Back to top
View user's profile Send private message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Sat Apr 13, 2013 12:19 pm    Post subject: Reply with quote

Hallo U.Tews,

das Array sieht wie folgt aus:

Quote:

Array
(
[206] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[ort] => Vranjica
[kurzbeschreibung] =>
[wohnungs_id] => 206
[typ] => A1
[gesamtpreis_hs] => 113
[gesamtpreis_ns] => 91
[gesamtpreis_ns2] => 75
[bettenanzahl] => 2
)

[207] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[ort] => Vranjica
[kurzbeschreibung] =>
[wohnungs_id] => 207
[typ] => B1
[gesamtpreis_hs] => 173
[gesamtpreis_ns] => 130
[gesamtpreis_ns2] => 114
[bettenanzahl] => 4
)

[208] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[ort] => Vranjica
[kurzbeschreibung] =>
[wohnungs_id] => 208
[typ] => C1
[gesamtpreis_hs] => 173
[gesamtpreis_ns] => 130
[gesamtpreis_ns2] => 114
[bettenanzahl] => 4
)

[209] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[ort] => Vranjica
[kurzbeschreibung] =>
[wohnungs_id] => 209
[typ] => D1
[gesamtpreis_hs] => 265
[gesamtpreis_ns] => 185
[gesamtpreis_ns2] => 145
[bettenanzahl] => 6
)

[981] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[ort] => Vranjica
[kurzbeschreibung] =>
[wohnungs_id] => 981
[typ] => D2
[gesamtpreis_hs] => 265
[gesamtpreis_ns] => 185
[gesamtpreis_ns2] => 145
[bettenanzahl] => 6
)

)
Array
(
[234] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 234
[typ] => B2
[gesamtpreis_hs] => 59
[gesamtpreis_ns] => 45
[gesamtpreis_ns2] => 35
[bettenanzahl] => 4
)

[233] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 233
[typ] => B1
[gesamtpreis_hs] => 65
[gesamtpreis_ns] => 49
[gesamtpreis_ns2] => 39
[bettenanzahl] => 3
)

[231] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 231
[typ] => A1
[gesamtpreis_hs] => 50
[gesamtpreis_ns] => 39
[gesamtpreis_ns2] => 30
[bettenanzahl] => 2
)

[235] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 235
[typ] => B3
[gesamtpreis_hs] => 65
[gesamtpreis_ns] => 49
[gesamtpreis_ns2] => 39
[bettenanzahl] => 4
)

[236] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 236
[typ] => B4
[gesamtpreis_hs] => 59
[gesamtpreis_ns] => 45
[gesamtpreis_ns2] => 35
[bettenanzahl] => 3
)

[1909] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[ort] => Slatine
[kurzbeschreibung] => Dies ist das Ferienhaus Klingenberg mit sieben Ferienwohnungen, welche sich in Grösse und Lage unterscheiden.
[wohnungs_id] => 1909
[typ] => C1
[gesamtpreis_hs] => 145
[gesamtpreis_ns] => 104
[gesamtpreis_ns2] => 89
[bettenanzahl] => 5
)

)
Array

Ich lesen die Datensätze aus MySQL aus und schreibe die Daten dann in das Array:

Quote:

while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$arr_haus[$row['objekt_id']][$row['wohnungs_id']][$key] = $value;
}
}


Viele Grüße
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4649
Location: Hamburg / Germany

PostPosted: Sat Apr 13, 2013 1:25 pm    Post subject: Reply with quote

Da passt was nicht zusammen.

Quote:
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$arr_haus[$row['objekt_id']][$row['wohnungs_id']][$key] = $value;
}
}


Danach müßte $arr_haus zunächt den Index objekt_id und danach den Index wohnungs_id haben.

In dem Dump vom Array fehlt aber die Ebene des objekt_id Index.
Back to top
View user's profile Send private message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Sat Apr 13, 2013 11:36 pm    Post subject: Reply with quote

Hallo,

hmm, ok. Das stimmt natürlich. Das Array sieht mit PHP (print_r) noch gut aus:

Quote:

Array
(
[91] => Array
(
[206] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 206
[bettenanzahl] => 2
)

[207] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 207
[bettenanzahl] => 4
)

[208] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 208
[bettenanzahl] => 4
)

[209] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 209
[bettenanzahl] => 6
)

[981] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 981
[bettenanzahl] => 6
)

)

[100] => Array
(
[234] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 234
[bettenanzahl] => 4
)

[233] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 233
[bettenanzahl] => 3
)

[231] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 231
[bettenanzahl] => 2
)

[235] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 235
[bettenanzahl] => 4
)

[236] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 236
[bettenanzahl] => 3
)

[1909] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 1909
[bettenanzahl] => 5
)

)

)


Danach übergebe ich es an das Template mit:

Quote:

$smarty->assign('arr_haus2', $arr_haus2);


Bei Smarty (print_r) sieht es dann so aus:

Quote:

Array
(
[206] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 206
[bettenanzahl] => 2
)

[207] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 207
[bettenanzahl] => 4
)

[208] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 208
[bettenanzahl] => 4
)

[209] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 209
[bettenanzahl] => 6
)

[981] => Array
(
[objekt_id] => 91
[objektname] => Ferienhaus Denis
[wohnungs_id] => 981
[bettenanzahl] => 6
)

)
Array
(
[234] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 234
[bettenanzahl] => 4
)

[233] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 233
[bettenanzahl] => 3
)

[231] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 231
[bettenanzahl] => 2
)

[235] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 235
[bettenanzahl] => 4
)

[236] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 236
[bettenanzahl] => 3
)

[1909] => Array
(
[objekt_id] => 100
[objektname] => Ferienhaus Stefan
[wohnungs_id] => 1909
[bettenanzahl] => 5
)

)
Array


Seltsam, woran könnte das liegen?

Viele Grüße
incubus

P.S. Habe das Array jetzt wg. der Übersichtlichkeit verkürzt.
Back to top
View user's profile Send private message
ovnn
Smarty Regular


Joined: 14 Apr 2010
Posts: 78
Location: Germany

PostPosted: Mon Apr 15, 2013 7:14 am    Post subject: Reply with quote

Wo definierst du $arr_haus2?

Dein Array oben in dem DB while heißt $arr_haus.


Nachtrag:

$smarty->assign('arr_haus2', $arr_haus[2]);

müsste richtig sein um Haus 2 anzusprechen.
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4649
Location: Hamburg / Germany

PostPosted: Mon Apr 15, 2013 2:10 pm    Post subject: Reply with quote

Junge, Du machst mich langsam fertig.

Jetzt redest Du plötzlich von $arr_haus2. Ist Dein Dump von $arr_haus2 von PHP aus?

Wie hast Du $arr_haus2 in PHP gefühllt?
Wie sieht jetzt Dein template aus?

Das zuletzt gepostete benutzte $arr_haus.
Back to top
View user's profile Send private message
incubus
Smarty Rookie


Joined: 24 Feb 2008
Posts: 9

PostPosted: Tue Apr 16, 2013 1:08 am    Post subject: Reply with quote

Sorry, für die Verwirrung. $arr_haus ist gleich zu $arr_haus2 - habe das nur kurz zu Testzwecken umgenannt.
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4649
Location: Hamburg / Germany

PostPosted: Tue Apr 16, 2013 3:07 pm    Post subject: Reply with quote

Okay.

{$item.0.objekt_id} kann nicht funktionieren, da es kein Objekt mit id = 0 gibt.

Was Du wahrscheinlich wolltest ist aus dem 1. Eintrag in $item das objekt_id verwenden.

Das ginge so
Code:

{foreach from=$arr_haus key=key item=item}
     {foreach from=$item item=item2}
       {if $item2@first}
          <h2>OBJEKT_ID {$item2.objekt_id}</h2>
          <a href="/unterkunft/ferienwohnung/ferienhaus.php?objekt_id={$key}">Zum Ferienhaus</a>
       {/if}
         <h2>Typ: {$item2.typ} Wohnungs_id: {$item2.wohnungs_id} Bettenanzahl: {$item2.bettenanzahl}</h2>
     {/foreach}
{/foreach}


Das ist aber in diesem Fall gar nicht notwendig, da Du in der <a href ...> Zeile schon richtig erkannt hast, dass das Objekt_id bereits in der $key Variablen steht.

Der folgende Kode tut's auch:
Code:
{foreach from=$arr_haus key=key item=item}
     <h2>OBJEKT_ID {$key}</h2>
     <a href="/unterkunft/ferienwohnung/ferienhaus.php?objekt_id={$key}">Zum Ferienhaus</a>
     {foreach from=$item item=item2}
         <h2>Typ: {$item2.typ} Wohnungs_id: {$item2.wohnungs_id} Bettenanzahl: {$item2.bettenanzahl}</h2>
     {/foreach}
{/foreach}
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP