Ankündigung

Einklappen
Keine Ankündigung bisher.

mehrere Arrays gleichermaßen sortieren

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

  • maeck
    hat ein Thema erstellt mehrere Arrays gleichermaßen sortieren.

    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

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

    Danke und Gruß
    Marcel

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Danke, das werde ich mir anschauen.

    Gruß Marcel

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • maeck
    antwortet
    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?

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Dann solltest Du aber mal die Variante von mermshaus in Ruhe ansehen.
    Das wäre dann das richtige für Dich, denke ich...

    Einen Kommentar schreiben:


  • maeck
    antwortet
    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

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    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...

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    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" !

    Einen Kommentar schreiben:


  • maeck
    antwortet
    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

    Einen Kommentar schreiben:


  • Sirke
    antwortet
    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"
      }
    }

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Bitte mal ein Beispiel machen..

    Einen Kommentar schreiben:

Lädt...
X