Mehrdimensionales Array sortieren

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

  • Mehrdimensionales Array sortieren

    Hallo an alle!


    Ich habe 2 Arrays

    $array1 = array("Avicennia Marina", "Rhizophora Stylosa", "Avicennia Officinalis");

    $array2 = array(100, 50, 70);

    $array3 = array($array1, $array2);

    Soweit so gut, die Einträge müssen direkt in Verbindung stehen, zB:

    Avicennia Marina gehört zu 100
    Rhizophora Stylosa gehört zu 50
    Avicennia Officinalis gehört zu 70

    Nun möchte ich die Zahlen absteigend (100, 70, 50) sortieren, dabei sollen jedoch die dazugehörigen Strings mitsortiert werden!

    Ergebnis soll also nach einer Ausgabe sein:

    Avicennia Marina gehört zu 100
    Avicennia Officinalis gehört zu 70
    Rhizophora Stylosa gehört zu 50

    WIE MACHT MAN SOWAS???

    Jemand eine Idee?

    Viele Grüße,

    Paul

  • #2
    suchst du:
    array_multisort();

    Kommentar


    • #3
      Hi,

      Warum nicht:

      PHP-Code:
      $array = array(maria => 100josef => 50); 
      Gruß Thomas

      Kommentar


      • #4
        Also irgendwie komme ich mit dem MultiSort noch nicht so ganz zurecht, scheint aber eine interessante Variante zu sein!

        -----------

        Warum nicht:

        $array = array(maria => 100, josef => 50);

        ->

        Weil die Daten dynamisch erzeugt werden, bez. ausgelesen werden, ich füge die Daten garantiert nicht händisch ein, sind viel zu viele, habe ja nur einen kleinen Ausschnitt gebracht!

        Viele Grüße,

        Paul

        Kommentar


        • #5
          Das war nur ein Beispiel, es lässt sich ebenfalls dynamisch zusammen setzen.

          PHP-Code:
          $test1 'maria';
          $test2 100;
          $test3 'josef';
          $test4 50;
          $array = array($test1 => $test2$test3 => $test4);
          print_r($array); 

          Kommentar


          • #6
            Ja, das ist mir schon klar!!!

            Aber die Daten kommen leider nicht sortiert, sie müssen also nachträglich sortiert werden!

            Und zwar absteigend nach den Zahlen!!!

            Habe ich aber alles schon ganz genau und detailiert im ersten Beitrag beschrieben!

            Viele Grüße,

            Paul

            Kommentar


            • #7
              Lass das Array sortieren nach dem Füllen mit Werten. Welche Wertepaare zusammen gehören weist du doch, also sollte es kein Problem geben.

              Kommentar


              • #8
                Tja, genau das habe ich eben noch nie gemacht!

                Ein mehrdimensionales Array füllen, ok, aber wie sortiere ich die 2 Arrays, sodass jedoch die zusammengehörende Paare nicht vertauscht werden?

                Viele Grüße,

                Paul

                Kommentar


                • #9
                  Ich wollte auf folgendes hinaus:
                  Du sollst die Wertepaare ins Array eintragen und dieses sortieren. Mit asort bleiben die Wertepaare zusammen.

                  Kommentar


                  • #10
                    manchmal ist es schneller eigene function zu schreiben, als fertige suchen

                    PHP-Code:
                    $array1 = array("Avicennia Marina""Rhizophora Stylosa""Avicennia Officinalis");

                    $array2 = array(1005070);

                    $array3 = array($array1$array2);
                    //der langsamste algoritm
                    function bubble_langsam($array3){
                      
                    $array=$array3;
                      
                    $zcount=count($array[1]);
                      if(
                    $zcount!=count($array[0]))die("die länge von arrays ist ungleich");
                       for(
                    $i=1;$i<$zcount;$i++){
                         for (
                    $a=$zcount-1;$a>=$i;$a--) {
                           if(
                    floatval($array[1][$a-1])>floatval($array[1][$a])){
                             
                    $tempzal=$array[1][$a-1];
                             
                    $tempnam=$array[0][$a-1];
                             
                    $array[1][$a-1]=$array[1][$a];
                             
                    $array[0][$a-1]=$array[0][$a];
                             
                    $array[1][$a]=$tempzal;
                             
                    $array[0][$a]=$tempnam;
                            }     
                         }     
                        }
                        return 
                    $array;
                    }
                    $array3=bubble_langsam($array3);
                    print_r($array3); 
                    Slava
                    bituniverse.com

                    Kommentar


                    • #11
                      Ich würde
                      (1) nicht zwei arrays haben, sondern nur einen, mit key=>value. Die "dynamischen" Werte werden mit bereich[$dynamischerkey]=$dynamischer_wert angelegt.
                      Das wäre also mit assoziativen arrays, einer der grossen Vorzüge von php.
                      (2) absteigend sortieren mit arsort();
                      (3) add-ited: Und nicht zu vergessen, den array nachher mit foreach(..) abzuklappern, anstatt mit (for i=1; i<length(bereich),i++)

                      Symbolisch:
                      PHP-Code:
                      for ($i=1i<10000i++)
                      {
                        
                      $bereich[$dynamischer_key]=$dynamischer_wert;
                      }
                      arsort($bereich);

                      //add-ited:
                      foreach($bereich as $key=>$value)
                      echo 
                      "$key und $value gehören zusammen.".
                      //that's all folks. 

                      falls es wirklich zwei arrays sein müssen, würde ich diese zuerst umwandeln in einen, sortieren und dann zurückwandeln. Falls die Anzahl arrays (zwei) auch symbolisch ist, hilft wohl nur noch multisort.

                      Zuletzt geändert von vierteln; 28.04.2006, 22:56.

                      Kommentar


                      • #12
                        Erstmals vielen Dank für die Antworten!

                        @ vierteln - dein Vorschlag gefällt mir, funzt jedoch noch nicht bei mir

                        wie stelle ich das also an, denn es müssen keine 2 arrays sein

                        ich möchte das gerne direkt an meinem Beispiel präsentieren

                        ich check ein verzeichnis ab, da finde ich genau 19 dateien also hat mein $cntFiles die Zahl 19

                        $percent ist eine Zahl zwischen 001 und 100
                        $name ist ein String zB "Avicennia Marina"

                        PHP-Code:

                        for ($i 0$i $cntFiles$i++){
                            
                        $bereich[$percent]=$name;
                        }
                        arsort($bereich);
                        foreach(
                        $bereich as $key=>$value

                        --------------------

                        Soll ich es so machen? Wenn ja, warum funktioniert es dann nicht? Bekomme ne Fehlermeldung.

                        Kommentar


                        • #13
                          @slava - danke, ich habe nun, da alles andere nicht funktioniert, deine function ausprobiert, funktioniert!!!

                          DANKE!

                          Jetzt habe ich nur noch ein minimales Problem, wie gebe ich die gewonnenen Daten aus?

                          Ich habs so probiert:

                          PHP-Code:
                          for($x 0$x 19$x++){
                              echo
                          "$array3[0][$x]";
                              echo
                          "$array3[1][$x]";

                          Wie funktioniert wirklich?

                          Kommentar


                          • #14
                            bubble sort ist langsamste sortier-algoritmus.
                            du hättest besser vorschlag von Alrik genommen.

                            PHP-Code:
                            for($x 0$x count($array3[0]); $x++){
                                echo
                            "$array3[0][$x]";
                                echo
                            "$array3[1][$x]";

                            Slava
                            bituniverse.com

                            Kommentar


                            • #15
                              habs schon gelöst, daran hatte es nicht gelegen, so habe ich es zumindest erfolgreich gelöst:

                              echo $allTogether[0][$x];
                              echo $allTogether[1][$x];

                              Kommentar

                              Lädt...
                              X