Array von Arrays reindexieren

  • Hey,


    Ich stehe irgendwie gerade mächtig auf dem Schlauch...


    Ich habe ein Array in dieser Form:


    Das äußere Array behält also beliebig viele weitere Arrays, diese bestehen aus einer Addressierung (String "name") und einem Wert "value" (int).


    Mein problem, ich muss nun den Index im Namen runterindexieren, also immer bei 0 anfangen lassen.


    Ich kriege es zwar hin, das hier zu erzeiugen, aber das war es auch:


    Aber diese Umformatierung bringt eigentlich quasi nichts...


    Zumal ich bei dieser neuindexierung nicht die Beziehung zwischen Haupteintrag und Ersatz verlieren darf...


    Ich hoffe das wurde verständlich :thumbsup::thumbsup:


    Grüße Kanu

  • Naja, Code hilft hier nciht so wirklich viel, aber ich versuche es mal anders ^^


    Ich habe eine Seite auf der quasi Belibig viele input und select Felder sein können.
    Diese erhalten dynamischen ein "name"-Attribute nach folgenden Schema: "ID[count][]" und "ersatz_ID[count][]".


    Pro ID kann es zwischen 1-16 Stück geben.


    Beim ersten Aufruf hat man dann Beispielsweise folgende Select-Felder
    123[0][]
    123[0][]
    ersatz123[0][]
    ersatz123[0][]
    123[1][]
    123[1][]
    789[0][]
    789[0][]
    789[1][]
    789[1][]


    Ja das sieht recht undurchsichtig aus, ist aber eigentlich sehr durchdacht. (Macht nur leider jetzt doch Probleme ^^' )


    Da diese aber dynmisch erstellt und auch gelöscht werden können, kann aber nahc dem 2. Aufruf soetwas hier entstehen:
    123[1][]
    123[1][]
    789[0][]
    789[0][]
    789[2][]
    789[2][]
    ersatz_789[2][]
    ersatz_789[2][]
    somit ist der Index nicht mehr fortlaufend und beginnt halt oftmals auch nciht mehr mit 0...
    Das will ich halt wieder ändern.


    An 2 Stellen kann ich da nun angreifen:
    Vorm Absenden im Browser per Js oder halt nach dem Absenden auf dem Sevrer via PHP...


    Im Grunde egal, mir mage infach kein Passender Algorithmus einfallen um das zu erreichen...


    Das zweite Beispiel soll am Ende quasi so aussehene:
    123[0][]
    123[0][]
    789[0][]
    789[0][]
    789[1][]
    789[1][]
    ersatz_789[1][]
    ersatz_789[1][]


    Vielleicht wurde das jetzt verständlicher? :D:D


    Den einzigen Code den ich jetzt hier zeigen könnte, wäre der zum dynamischen hinzufügen und löschen der Felder...^^


    EDIT: Das "name"-Schema könnte man auch ändern, aber das wäre mit sehr sehr viel Arbeit verbunden, den ich gerne vermeiden würde...

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von kanufrosch ()

  • Verstehe.
    Das einfachste was mir einfällt wäre:


    output:

  • Bin ja erstmal frph, das ich mein problem klarmachen konnte.


    Leider hatte ich diesen Ansatz auch schon, aber der funzt so auch nciht, denn dort geht mir die Relation zwischen dem Ersatz und dem original verlöoren, soll heißen:


    Habe ich für [1] keinen Ersatz, aber für [2] hat der Ersatz auch die [2], würde dann aber die [0] statt der [1] bekommen... Siehe:
    Original:



    Was raus kommt:


    Was rauskommen sollte:


    Leider ist das ein entscheidender Punkt...


    Hätte nicht gedacht, dass mir ausgerechnet dass so auf die Füße fällt...

  • Verstehe.
    Also 269 und ersatz_269 stehen in Beziehung.
    Also würde auch ABC_XYZ_555 in Beziehung zu 555 stehen - richtig?


    Und 269's Offsets (zB 3, 4, 5) müssen runtergedrückt werden, dabei aber die Beziehung zu ersatz_269's Offsets behalten - richtig?


    edit:


    ich glaub ich habs:


    out:

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von cottton ()

  • :D sowas mach ich gerne =)


    Weiß allerdings nicht, ob das auch "rückwärts" laufen würde.
    Wenn also die 40 und dann die 30 und dann die 20 im Array kommen würde.
    Man könnte dem glaub ich vorsorgen, indem man die Arrays der 2ten Ebene nach Keys sortiert.


    ungetestet

  • :D


    Der Fall kann nciht eintreten (oder sollte nicht? :D ), da das verändern der Reiehnfolge kein Feature ist...
    Nur erstellen und löschen, wodruch die Reihenfolge im Grunde immer aufsteigend bleibt ;)


    Aber ja, rein logisch müsste das dann mit deiner Anpassung sogar auch hinkommen ^^


    Ich teste es mal noch ^^