View previous topic :: View next topic |
Author |
Message |
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Tue Mar 12, 2013 4:18 pm Post subject: Mehrdimensionales Array |
|
|
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 |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
|
Back to top |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Mon Apr 01, 2013 12:25 am Post subject: |
|
|
@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 |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Fri Apr 12, 2013 10:21 pm Post subject: |
|
|
Gelöst, mit einem sinnvollen Array klappt auch alles.... |
|
Back to top |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Fri Apr 12, 2013 11:26 pm Post subject: |
|
|
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 |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Sat Apr 13, 2013 8:04 am Post subject: |
|
|
So ganz verstehe ich Deine Array Struktur immer noch nicht.
Was liefert ein $arr_haus|print_r ? |
|
Back to top |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Sat Apr 13, 2013 12:19 pm Post subject: |
|
|
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 |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Sat Apr 13, 2013 1:25 pm Post subject: |
|
|
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 |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Sat Apr 13, 2013 11:36 pm Post subject: |
|
|
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 |
|
ovnn Smarty Regular
Joined: 14 Apr 2010 Posts: 82 Location: Germany
|
Posted: Mon Apr 15, 2013 7:14 am Post subject: |
|
|
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 |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Mon Apr 15, 2013 2:10 pm Post subject: |
|
|
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 |
|
incubus Smarty Rookie
Joined: 24 Feb 2008 Posts: 9
|
Posted: Tue Apr 16, 2013 1:08 am Post subject: |
|
|
Sorry, für die Verwirrung. $arr_haus ist gleich zu $arr_haus2 - habe das nur kurz zu Testzwecken umgenannt. |
|
Back to top |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Tue Apr 16, 2013 3:07 pm Post subject: |
|
|
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 |
|
|