| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

22-02-2011, 18:51
|
|
Normansmily
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 16
|
|
mehrdimensionales Array aufbröseln
Hi,
wusste nicht so rechts wie mein Vorhaben nennen soll,
versuche zur Zeit folgendes, ich hab ein mehrdimensionales array und will daraus einen Tooltip bauen.
Dabei stoß ich auf ein total banales Index-Problem, das ich zur Zeit nicht weg bekomme.
Ich brauche je die Keys des letzten Arrays in der Stufe und die Werte dazu.
Die Anzahl der Dimensionen unterscheidet sich.
Bsp-Array:
Code:
$in_array =
Array ( [Konten] => Array ( [2] => Array ( [Kontonr] => 999999
[KontoBez] => BAR
[Saldo] => 0,00€ )
[1] => Array ( [Kontonr] => 1630
[KontoBez] => Privat
[Saldo] => 0,00€ )
[4] => Array ( [Kontonr] => 3733
[KontoBez] => Privat
[Saldo] => 0,00€ )
)
[Vorschau] => Array ( [0] => Array ( [Vorschau] => Endsaldo
[Wert] => 0,00€ )
[1] => Array ( [Vorschau] => Restausgabe
[Wert] => 0,00€ )
[2] => Array ( [Vorschau] => Offene Ausgabe
[Wert] => 0,00€ )
[3] => Array ( [Vorschau] => Manuell
[Wert] => 0,00€ )
)
)
Die Tabelle des ersten Arrays soll so aussehen:
Code:
Kontonr Kontobez Saldo
-----------------------
999999 Bar 0,00€
1630 Privat 0,00€
3733 Privat 0,00€
....
Das gleiche quasi für das 2te Array in dem übergebenen Array.
Jetzt war mein Ansatz mal (quit&dirty):
PHP-Code:
foreach($in_array as $array_tooltip_loop1) { // if(!is_array($array_tooltip_loop1[0])) { $array_tooltip_loop1 = array($in_array); }
while(is_array($array_tooltip_loop1[1])) //////// hier der Index macht Probleme, es gibt nicht immer eine 1 { foreach($array_tooltip_loop1 as $array_tooltip_loop1) { null; } // print_r($array_tooltip_loop1); // protokoll_trace(__FILE__,__FUNCTION__,null,'in while',$string); } }
// print_r($array_tooltip_loop1);
foreach(array_keys($array_tooltip_loop1) as $string_SpaltenBez) { $string = $string."<th align='left'>$string_SpaltenBez</th>"; }
Das klappt eig so ziemlich, nur macht die fett-markierte 1 mit Probleme, weil es nicht immer einen Index mit 1 gibt in dem jeweiligen Array.....
Jemand ne Idee?
Bin für alles offen, natürlich auch, wenns viel einfacher geht..
Geändert von Normansmily (22-02-2011 um 18:53 Uhr)
|

22-02-2011, 18:59
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
bei deiner chaotischen Code-Baustelle seh ich nicht ganz durch, aber es sieht so aus, als wäre die untere foreach-Schleife außerhalb der anderen. Dann würdest du nur den letzten Eintrag des Haupt-Arrays bekommen. Aber egal, wirf den Code nochmal weg und fang ganz normal mit zwei verschachtelten foreach-Schleifen an:
PHP-Code:
foreach ($in_array as $k1 => $v1) { // $kX und $vX sinnvoll umbenennen $headersWritten = false; foreach ($v1 as $k2 => $v2) { if (!$headersWritten) { echo "..."; // Überschriften schreiben $headersWritten = true; } echo "..."; // Zellen einer Zeile schreiben } }
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-02-2011, 19:01
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Ich verstehe dein Problem nicht so wirklich.
Wenn es keinen fortlaufenden nummerischen Index gibt - dann greife halt nicht über einen solchen zu!
Auch mehrere Array-Ebenen lassen sich mit verschachtelten foreach-Schleifen problemlos durchlaufen, ohne das man die Keys der Arrays kennen muss.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

22-02-2011, 19:07
|
|
Normansmily
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 16
|
|
Gerne räum ich den Code mal etwas auf, denke der Ansatz ansich war net verkehrt.
Das Problem an mehreren foreach Schleifen ist, da ich vorher die Tiefe des Array nicht kenne wäre das nie 100%ig.
Ohne numerischen Index hatte ich auch schon versucht zuzugreifen, dann gehter allerdings in die while-schleife nicht mehr rein.
Mal etwas sauberer:
PHP-Code:
foreach($in_array as $array_tooltip_loop1) {
while(is_array($array_tooltip_loop1[1])) //////// hier der Index macht Probleme, es gibt nicht immer eine 1 { foreach($array_tooltip_loop1 as $array_tooltip_loop1) { null; } } }
foreach(array_keys($array_tooltip_loop1) as $string_SpaltenBez) { $string = $string."<th align='left'>$string_SpaltenBez</th>"; }
|

22-02-2011, 19:10
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Normansmily
Das Problem an mehreren foreach Schleifen ist, da ich vorher die Tiefe des Array nicht kenne wäre das nie 100%ig.
|
Was heißt das konkret, dass du die Tiefe nicht kennst?
Das gezeigte Format sieht relativ statisch aus.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

22-02-2011, 19:13
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Für das mit dem numerischen Index hab ich dir ja schon eine Lösung gepostet. Wenn die Tiefe nicht bekannt ist, musst du das ganze in eine rekursive Funktion packen, in der du erstmal ermittelst, ob du schon auf der richtigen Ebene angekommen bist und dann das machen, was ich gepostet habe.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-02-2011, 19:13
|
|
Normansmily
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 16
|
|
Das bedeutet, das $in_array könnte auch so aussehen:
Code:
$in_array = Array ( [Kontonr] => 999999
[KontoBez] => BAR
[Endsaldo] => 0,00€ )
Der Knackpunkt ist, dass mich immernur das letzte Array interessiert.
Wenn ich das zur Verfügung habe ist der Rest eigentlich ganz leicht...
|

24-02-2011, 11:33
|
|
Normansmily
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 16
|
|
Keiner ne Idee?
|

24-02-2011, 13:46
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Das letzte Arrayelement bekommst du mit end(). Hilft dir das vielleicht weiter?
Sonst musst du dein Ziel mal so beschreiben, dass man es nachvollziehen kann. Im Moment bin ich nämlich nicht sicher, ob ich dich richtig verstehe.
|

24-02-2011, 15:32
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Normansmily
Keiner ne Idee?
|
Wieviele Ideen brauchst du noch? Vielleicht solltest du erstmal auf die eingehen, die du schon bekommen hast und warum die dir nicht reichen bzw. was dich an denen stört.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-03-2011, 17:55
|
|
Normansmily
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 16
|
|
Zitat:
Zitat von AmicaNoctis
Wieviele Ideen brauchst du noch? Vielleicht solltest du erstmal auf die eingehen, die du schon bekommen hast und warum die dir nicht reichen bzw. was dich an denen stört.
|
Wenns die entscheidende wäre, dann nur eine.... die kam nur leider nicht....
.... wie auch immer, war am 23.02. abends auf Geschäftsreise un hab das nochmal neu aufgesetzt.... klappte dann am selben abend noch....
Falls sowas mal jemand versucht, hier meine Function zur Unterstützung:
PHP-Code:
function show_tooltip_array($in_css_class,$in_css_spanclass,$in_showwert,$in_array_text,$in_array_tooltip,$in_table_border) {
$kon_show_tooltip = get_konstante_session('SHOW_TOOLTIP');
// Berechtigung & Ausstieg prüfen if(nvl(strtoupper($kon_show_tooltip),' ') == 'OFF') { return $in_showwert; } if(!is_array($in_array_tooltip)) { return $in_showwert; }
$in_array_tooltip = array_values($in_array_tooltip); if(is_null($in_array_tooltip[0])) { return $in_showwert; } // Defaults if(is_null($in_css_class)) { $in_css_class = 'tooltip'; } if(is_null($in_css_spanclass)) { $in_css_spanclass = 'info'; } $i_Tabelle = 0; $i_Text = 0; $i_TH = 0;
// String basteln $string = " <a href='#hint' class='$in_css_class'> <span class='$in_css_spanclass'> ";
foreach($in_array_tooltip as $array_tooltip_TabLoop) { $array_sic = $in_array_tooltip; $array_tooltip_TabLoop = array_values($array_tooltip_TabLoop);
if(!is_array($array_tooltip_TabLoop)) { $array_tooltip_TabLoop = array($array_tooltip_TabLoop); }
while(is_array($array_tooltip_TabLoop[0])) { $array_sic = $array_tooltip_TabLoop;
$array_tooltip_TabLoop = $array_tooltip_TabLoop[0]; $array_tooltip_TabLoop = array_values($array_tooltip_TabLoop); }
$i_Tabelle++;
if($i_Tabelle > 1) { $string = $string." <br /><br /> "; }
$string = $string." <table border='$in_table_border' align='left'> <tr> ";
foreach($array_sic as $array_SpaltenBez) { $i_TH++; if($i_TH == 1) { foreach(array_keys($array_SpaltenBez) as $string_SpaltenBez) { $string = $string."<th align='left'>$string_SpaltenBez</th>"; } } }
$string = $string."</tr>";
foreach($array_sic as $array_Zeilen) { $string = $string."<tr>";
foreach($array_Zeilen as $array_ZeilenBez) { $string = $string."<td text-align='right' !important>$array_ZeilenBez</td>"; }
$string = $string."</tr>"; }
$i_TH = 0; if(count($in_array_tooltip) > $i_Tabelle && !empty($array_Loop1[$i_Tabelle])) { $string = $string." <tr><td> </td></tr> "; } $string = $string."</table>"; }
$string = $string."</span>$in_showwert</a>";
return $string; }
Der Trick lag dabei im $array_sic, einfach das letzte vor dem letzten loop zu merken.
Geändert von Normansmily (03-03-2011 um 17:59 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|