PHP: Ermitteln ob ein Array mehrere Unterarrays besitzt

@Saugkraft vielleicht können die gar nix dafür. "@attributes" sieht für mich aus, wie angewendetes SimpleXML um XML zu parsen. Die Originaldaten sehen also vermutlich so aus:

Code:
<instances>
 <instance id="12345" name="Miller" />
 <instance id="23456" name="John Doe" />
 ...
</instances>

Simple-XML liefert bei nur einer Entität eben diese und bei n Entitären eben ein Array davon. Vielleicht macht es Sinn den Weg umzukehren und aus dem Array wieder mit PHPs SimpleXML ein XML-DOM zu erstellen. Den kannst Du dann sauber durchlaufen.
 
Hat es ja nicht. Das ist das Problem. Alles andere ist "Kinderkacke". Das Problem ist die Inkonsistenz, dass Variante 1 einen Index liefert, 2 nicht.

das halt die implementierung von arrays in PHP als map.
aber PHP bietet dir doch verschiedene wege über arrays zu iterieren.
wie gehst du denn über das array?
foreach($array as $val)
oder
foreach ($array as $key => $val)
?
und was passiert, wenn du das auf beide varianten loslässt?
 

Da kann ich tatsächlich nochmal nachschauen. Mache ich nachher mal. Letztlich wird da aber vermutlich auch nichts anderes bei rauskommen. Falls doch.. Das wäre wirklich eine gute Lösung, schon beim XML anzusetzen.

[QUOTE="oneOeight, post: 9165635, member: 27351"]und was passiert, wenn du das auf beide varianten loslässt?[/QUOTE]
Je nachdem. Wenn ich Array 1 hab, knallt es, wenn ich Array 2 hab auch. Eben umgekehrt.

Ich gehe mit der ersten Variante drüber und lese dann => val aus.

Korrekter wäre aber: foreach($array as $arrayOfValues)

Und dann lasse ich mir mit echo $arrayOfValues["name"]; den Wert ausgeben.

foreach($array as $arrayOfValues) klappt aber nur wenn ich auch einen Index bekomme. Den habe ich aber eben bei den "ein-wertigen" Arrays nicht. Da ist keine Indexebene vorhanden.

Ich kann also nicht mit foreach($array..) sondern müsste direkt zu echo $array["name"]; springen.

Ich kann es ja auch nochmal deutlicher sagen:

"Hole das Array" gibt mir entweder:
[Leute]
[0]
[Name]: "Schmidt"
[1]
[Name]: "Müller"

oder(!) wenn es nur einen gibt
[Leute]
[Name]: "Schmidt"

Korrekt wäre:
[Leute]
[0]
[Name]: "Schmidt"

Dann könnte ich durch [Leute] durchgehen.. foreach "array in Leute" echo -> val. Bei Name bin ich eben schon auf der Werteebene. Wenn ich da im zweiten Fall eine Schleife mit foreach drüberlaufen lasse, bekomme ich einen Fehler, weil das Array, das ich abgrase, eben nicht dieselbe Syntax hat wie das andere.

Ich hoffe, das hat es jetzt nicht noch mehr verkompliziert. :teeth:

Ich muss also prüfen, ob ich "eigentlich" schon auf der Werteebene bin. Technisch gesehen bin ich das aber nicht, weil [Name] genauso wie der Index [0].. ein Array ist.

Ich lasse mir nachher mal das XML ausgeben. Vielleicht fangen wir da einfach an.
 
there mak you but a barrel open :crack:

Du mußt halt nur ein bisschen Semantik prüfen um EINEN Sonderfall abzufangen.
:crack:

Das kann ich auch mit ASP oder TurboBasic 1.0. :D

Aber ich will ja was lernen. Sich über Programmierkonzepte "zu streiten" finde ich mit den Kollegen aller Sprachen immer ganz fruchtbar. Python z.B. kann ich einigermaßen gut lesen und anpassen, hab aber noch nie irgendwas from the scratch programmiert. Wenn ich da jetzt ein ähnliches Problem hätte, würde ich noch dümmer fragen, damit ich hinter das Konzept der Überlegung komme.

Wie gesagt.. ASP.. Da geht XML Parsing per for next Schleife. Luxus geht anders. :hehehe:
 
Wollte nochmal eine Rückmeldung geben.

Das Problem war noch ein Stück "komplizierter". Es gibt nicht nur zwei sondern drei Möglichkeiten. Letztlich hab ich es über "Tricksen mit Reihenfolge" gelöst.

Zuerst muss ich abfragen, ob es zwei Unterebenen gibt. Falls ja, gibt es die Möglichkeit, dass [0] existiert. Dann gibt es drei Unterebenen und ich kann 0, 1, 2.. etc mit foreach abarbeiten. Falls nicht, lasse ich die Attribute der zweiten Ebene anzeigen.
Und falls es nur eine Ebene gibt (ohne die Unterebenen), weiß ich, dass keine Werte vorhanden sind.

Ich finde es immer noch beknackt, aber so geht es. Wenn ich mal ganz viel Langeweile hab, schreib ich mir einen Service dazu.

Und wenn ich mal rausfinde, warum die diese Logik gewählt haben, statt einfach ein "NULL" oder altenativ ein Array mit x Elementen zurückzuliefern, geb ich einen aus. :hehehe:

Und wenn die Säcke bei Adobe das Problem irgendwann finden und beheben und ich wieder von vorne anfangen muss, dann fahre ich irgendwen mit meinem Porsche an. :crack:
 
  • Gefällt mir
Reaktionen: Impcaligula
Und wenn die Säcke bei Adobe das Problem irgendwann finden und beheben und ich wieder von vorne anfangen muss, dann fahre ich irgendwen mit meinem Porsche an

ach ja Pömpelchen, es hat schon seine Gründe warum Admins und Programmierer nicht ans Sonnenlicht dürfen und auch sonst nur mit einem amtlich bestellten Betreuer sich unter Menschen aufhalten dürfen!
 
Zurück
Oben Unten