Ankündigung

Einklappen
Keine Ankündigung bisher.

mehrere Arrays gleichermaßen sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mehrere Arrays gleichermaßen sortieren

    Hallo,

    ich habe ein Anmeldeformular, in dem eine Familie Ihre Mitglieder (Eltern und Kinder) anmelden kann. Dafür habe ich folgendes div:
    PHP-Code:
    <div class="user" id="user">
        <
    div class="type-text">        
            <
    label for="surname" class="surname">Vorname</label>        
            <
    input type="text" class="surname" id="surname" name="surname[]"  />
        </
    div>
        <
    div class="type-text">        
            <
    label for="gender" class="gender">Geschlecht</label>
            <
    input type="radio" name="gender[]" class="gender" id="gender" value="M" checked="checked" />männlich
            
    <input type="radio" name="gender[]" class="gender" id="gender" value="W" />weiblich
        
    </div>                      
    </
    div
    Wie ihr seht möchte ich mit Arrays arbeiten.

    Wenn die Daten übertragen worden sind, möchte ich das Array "Vorname" sortiert (ASC) ausgeben. Dabei soll auch das Array "gender" entsprechend dem Array Vorname sortiert ausgegeben werden:
    A_Vorname, A_Geburtsdatum
    B_Vorname, B_Geburtsdatum
    ...

    Die beiden Arrays haben ja nichts miteinander zu tun. Ist es dennoch möglich, ein (oder mehrere) Arrays so zu sortieren, wie ein anderes Array zuvor sortiert wurde?

    Gruß Marcel


  • #2
    Bitte mal ein Beispiel machen..
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Hast du mal mehrere deiner HTML Blöcke in einem Formular gehabt und das abgesendet? Da alle Radio Buttons für das geschleckt den gleichen Namen haben, wird nur ein einziges Geschlecht versendet!

      Ich würde, da es sich ja sicherlich um eine begrenzte Anzahl an Eingabefelden handelt, jedem Eingabefeld eine Nummer mitgeben, welche ich beim Empfangen hochzähle und prüfe, ob die Variablen gefüllt sind!

      Die Funktion usort() könnte für dich in Frage kommen! Dazu benötigst du jedoch einen Array der Form:
      Code:
      array(n) {
        [0]=> array(2) {
          "Vorname"    => "Der Vorname der 1. Person"
          "Geschlecht" => "Das Geschlecht der 1. Person"
        }
        [1]=> array(2) {
          "Vorname"    => "Der Vorname der 2. Person"
          "Geschlecht" => "Das Geschlecht der 2. Person"
        }
        .
        .
        .
        [n-1]=> array(2) {
          "Vorname"    => "Der Vorname der n. Person"
          "Geschlecht" => "Das Geschlecht der n. Person"
        }
      }

      Kommentar


      • #4
        Hallo Sirke,
        Zitat von Sirke Beitrag anzeigen
        Hast du mal mehrere deiner HTML Blöcke in einem Formular gehabt und das abgesendet? Da alle Radio Buttons für das geschleckt den gleichen Namen haben, wird nur ein einziges Geschlecht versendet!
        Ehrlich gesagt habe ich mir um das Geschlecht noch keine Gedanken gemacht, da ich bisher nur mit dem Vorname getestet habe.
        Ich clone das div "user" mit JS und ändere beim Clonen den Namen des divs in "user2", "user3", etc. Ebenso die id "surname" in "surname2", "surname3". DAs Attribut name gebe ich dabei als Array an, damit ich in PHP mit dem Array arbeiten kann.

        Genauso wollte ich auch mit gender verfahren.
        Aber anhand deiner Nachfrage ist mir beim Recherchieren aufgefallen, dass das wohl gar nicht gehen wird, oder?

        Heißt das, ich kann bei RadioButtons nicht mit name[] arbeiten, sondern jedem Element zwingend einen eigenen Namen geben?

        Gruß Marcel

        Kommentar


        • #5
          Radio Button erlauben eh nur eine Auswahl pro Gruppe, daher mach Array keinen Sinn.
          Welche Button eine Gruppe bilden entscheidet man einfach durch gleiche Namensvergebung: z.B. name="gender1" !
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Ich glaube, es spricht nichts dagegen, die Formularelemente etwa so zu benennen:

            Code:
            <input type="text" name="data[0][vorname]" />
            <input type="text" name="data[0][nachname]" />
            
            <input type="text" name="data[1][vorname]" />
            <input type="text" name="data[1][nachname]" />
            
            ...
            
            <input type="text" name="data[n][vorname]" />
            <input type="text" name="data[n][nachname]" />
            Das name-Attribute (also die Indizes) könntest du sicher auch per JavaScript dynamisch setzen.

            Das ist von der Idee her das, was Sirke gepostet hat, aber ich dachte, vielleicht hat da ja jemand noch 'ne Meinung zu.

            Kommentar


            • #7
              Natürlich ist das eleganter, zumindest finde ich das...
              Aber ich denke sein Problem liegt im Verständnis einer Radiobox.
              Denn er versucht
              Code:
              <input type="radio" name="gender[]" ...
              <input type="radio" name="gender[]" ...
              dafür reicht aber definitiv
              Code:
              <input type="radio" name="gender" ...
              <input type="radio" name="gender" ...
              die geschweiften Klammern waren imho unnötig.

              Ob er jetzt die Mehrzahl der Personen durch name="gender1", name="gender[1]" oder name="data[1][gender]" unterscheidet ist erst im nächsten Schritt wichtig, denke ich...
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Du hast recht, ich wollte die values der radioboxes in einem Array abspeichern.

                Hintergrund: Ich clone obiges DIV mit JS und wollte dabei die Möglichkeit nutzen, dass - mal angenommen ich clone 2x und gebe dann drei Vornamen ein - in dem Array vorname[] anschließend alle drei Vornamen stehen.
                So verfahre ich bisher mit allen input-Feldern, was auch funktioniert

                Das dies mit Radioboxes nicht klappt verstehe ich jetzt.

                Dann bleibt mir wohl nichts anderes übrig, als das Gender-Attribut "name" beim Clonen mit einer Nummer zu versehen. In PHP muss ich die Variablen dann durchlaufen und in ein Array schreiben.

                Marcel

                Kommentar


                • #9
                  Dann solltest Du aber mal die Variante von mermshaus in Ruhe ansehen.
                  Das wäre dann das richtige für Dich, denke ich...
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Zitat von maeck Beitrag anzeigen
                    Dann bleibt mir wohl nichts anderes übrig, als das Gender-Attribut "name" beim Clonen mit einer Nummer zu versehen. In PHP muss ich die Variablen dann durchlaufen lassen und in ein Array schreiben.
                    Du kannst weiterhin die Syntax mit den geschweiften Klammern nutzen - dann bekommst du in PHP auch weiterhin ein Array, dass du bequem(er) durchlaufen kannst, als wenn du dort anfängst, Variablennamen dynamisch zusammenzusetzen.

                    Du musst nur darauf achten, dass der Name pro Radiobutton-Gruppe weiterhin unterschiedlich ist. Die von mermshaus vorgeschlagene Syntax lässt sich dazu gut benutzen, als name="gender[0]", name="gender[1]", etc. - jeweils für eine zusammengehörige Gruppe von Radionbuttons.

                    Kommentar


                    • #11
                      Zitat von ChrisB Beitrag anzeigen
                      Die von mermshaus vorgeschlagene Syntax lässt sich dazu gut benutzen, als name="gender[0]", name="gender[1]", etc. - jeweils für eine zusammengehörige Gruppe von Radionbuttons.
                      Oh stimmt, dann geht das ja doch

                      Noch mal zu der eigentlichen Frage, mit dem Sortieren von Arrays.
                      Wenn ich jetzt das Array vorname[] und gender[] habe, z.B.:
                      Code:
                      [surname] => Array
                           (
                               [0] => Michael
                               [1] => Christiane
                           )
                      
                      [gender] => Array
                      
                           (
                               [0] => M
                               [1] => W
                           )
                      Wie kann ich das Array "surname" aufsteigend (ASC) sortieren:
                      Code:
                      Christiane 
                      Michael
                      und gleichzeitig dafür sorgen, dass auch das Array "gender" dementsprechend sortiert wird:
                      Code:
                      W
                      M
                      Geht das nur, wenn ich alle Arrays nochmal in ein übergeordnetes Array packe - wie von Sirke beschrieben?

                      Kommentar


                      • #12
                        mit ksort kannst Du die Schlüssel beibehalten. Über array_keys und usort kannst Du dann bspw. schlüsselabhängig die restlichen Angaben äquivalent anordnen.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Danke, das werde ich mir anschauen.

                          Gruß Marcel

                          Kommentar


                          • #14
                            Zitat von maeck Beitrag anzeigen
                            Wie kann ich das Array "surname" aufsteigend (ASC) sortieren [...] und gleichzeitig dafür sorgen, dass auch das Array "gender" dementsprechend sortiert wird
                            array_multisort

                            Kommentar


                            • #15
                              Zitat von ChrisB Beitrag anzeigen
                              array_multisort
                              Genial, genau so etwas habe ich gesucht!

                              Danke und Gruß
                              Marcel

                              Kommentar

                              Lädt...
                              X