Nach Array-Sortierung einträge weg

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

  • Nach Array-Sortierung einträge weg

    Hi Leute,

    also ich habe ein Array, welches folgendermaßen aufgebaut:

    $array_namen["Hallo Welt"] = 1234;
    $array_namen["Hallo Universum"] = 5678;
    $array_namen["guten Abend"] = 9012;
    [COLOR=red]$array_namen["mir fällt nichts mehr ein"] = 3423;[/COLOR]
    $array_namen["und noch weniger"] = 1434;
    [COLOR=red]$array_namen["keine Ahung mehr"] = 3423;[/COLOR]

    nun habe ich das Problem, das array folgendermaßen sortieren möchte:

    PHP-Code:
    $array_namen=array_flip($array_namen);
    ksort($array_namen);
    $array_namen=array_flip($array_namen); 
    ein Eintrag verloren geht (oben rot hervorgehoben), das kommt dadurch, das diese die gleiche Zahl stehen haben, bei mehreren gleichen Einträgen gehen entsprechend mehr Einträge verloren, nur habe ich keine Ahnung wie ich dieses Problem lösen soll. Hat einer eine Idee wie ich das hinbekomme ? Ziel ist es halt, das die Namen nach höhe der Zahlen sortiert werden.

    gruß Picard

  • #2
    wozu soll es eigentlich gut sein, keys und values zu vertauschen? was du brauchst, ist ein zweidimensionales array mit eindeutigen indizes.

    das problem hast du erkannt, in den user notes zu array_flip im manual wird das auch schon behandelt.

    Kommentar


    • #3
      Ähm, ... wozu das vertauschen gut ist ?

      Ich hielt das für das einfachste um die Namen und die Values passend zu behalten, da der Wert zu dem Namen gehört und die zugehörigkeit nicht verloren gehen darf. Hatte keine bessere Idee wie ich es sonst Sinnvoll sortieren soll, bin aber für verbesserungsvorschläge offen, habe nur wie gesagt leider keine Ahung wie ich es sonst machen soll.

      gruß Picard

      Kommentar


      • #4
        Warum benutzt du nicht einfach eine gegebene PHP Funktion asort ?
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          Original geschrieben von penizillin
          was du brauchst, ist ein zweidimensionales array mit eindeutigen indizes.

          Kommentar


          • #6
            was du brauchst, ist ein zweidimensionales array mit eindeutigen indizes.
            Warum?
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              weil er zwei arten von daten hat, die semantisch gesehen beide "values" sind.

              Kommentar


              • #8
                Für ihn sind die Indizes doch recht eindeutig.
                Code:
                Array
                (
                    [0] => Array
                        (
                            [0] => 3423
                            [1] => keine Ahung mehr
                        )
                
                    [1] => Array
                        (
                            [0] => 1434
                            [1] => und noch weniger
                        )
                
                )
                Oder willst du dafür eine eigene Sortierfunktion schreiben?
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  Original geschrieben von tontechniker
                  Warum benutzt du nicht einfach eine gegebene PHP Funktion asort ?
                  Weil da dummerweise das gleiche Problem ist !



                  Nungut, ... mal angenommen ich baue mir ein Array, welches folgendendermaßen aussieht:

                  Also wie muss ich jetzt mein Array bauen, damit ich danach Sinnvoll sortieren kann um das Array dann später halt sortiert auszugeben ?

                  EDIT:

                  PHP-Code:
                  Array
                  (
                      [
                  0] => Array
                          (
                              [
                  0] => 3423
                              
                  [1] => keine Ahung mehr
                          
                  )

                      [
                  1] => Array
                          (
                              [
                  0] => 1434
                              
                  [1] => und noch weniger
                          
                  )


                  Und wie sortiere ich das nun und gebe anschlißend die Namen sortiert nach höhe der Zahlen aus ?

                  Zuletzt geändert von Picard; 01.05.2007, 14:53.

                  Kommentar


                  • #10
                    PHP-Code:
                    ...
                    asort $array_namen );
                    print_r $array_namen ); 
                    Code:
                     Array
                    (
                        [Hallo Welt] => 1234
                        [und noch weniger] => 1434
                        [mir fällt nichts mehr ein] => 3423
                        [keine Ahung mehr] => 3423
                        [Hallo Universum] => 5678
                        [guten Abend] => 9012
                    )
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Oder willst du dafür eine eigene Sortierfunktion schreiben?
                      genau das - dann kann ich sicher sein, dass die werte nicht unikal sein müssen und ich trotzdem das gewünschte erreiche.

                      Kommentar


                      • #12
                        Original geschrieben von tontechniker
                        PHP-Code:
                        ...
                        asort $array_namen );
                        print_r $array_namen ); 
                        Code:
                         Array
                        (
                            [Hallo Welt] => 1234
                            [und noch weniger] => 1434
                            [mir fällt nichts mehr ein] => 3423
                            [keine Ahung mehr] => 3423
                            [Hallo Universum] => 5678
                            [guten Abend] => 9012
                        )
                        Und was mache ich wenn ein Name mehrfach vorkommt, kommt zwar eher selten vor, kann aber durchaus passieren.

                        Kommentar


                        • #13
                          meine antwort lesen.

                          Kommentar


                          • #14
                            Hm, ...

                            ja nur habe ich nun gar keine Ahnung mehr wie ich das machen soll.
                            Also wie muss nun mein Array aussehen und wie muss ich sortieren ?
                            bzw wie muss ich mir meine Sortierfunktion schreiben ?

                            gruß Picard

                            Kommentar


                            • #15
                              Also wie muss nun mein Array aussehen ...
                              das hat tontechniker weiter oben erwähnt.
                              bzw wie muss ich mir meine Sortierfunktion schreiben ?
                              im manual die beispiele zu usort() mal angucken.

                              Kommentar

                              Lädt...
                              X