kleinsten einträge aus array löschen

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

  • kleinsten einträge aus array löschen

    Hi leute,
    ich möchte aus einem array die kleinsten einträge löschen. Das heisst, ich möchhte nur noch 4 drin haben und das sollen die größen sein.

    PHP-Code:
        arsort ($olor);
        
    array_splice ($olor4); 
    Habs jetzt so gemacht, dass geht auch gut. Allerdings verändert sich dabei die reihenfolge im array und das darf nicht, weil ich mit den index dieses arrays noch zugriffs auf zugehörende werte in anderen array haben muss. jemand ne idee?
    nein?

  • #2
    Wieso ändern sich die Indizes???

    http://de2.php.net/manual/de/function.arsort.php

    void arsort ( array array [, int sort_flags])

    Diese Funktion sortiert ein Array so, dass der Zusammenhang zwischen den Indizes und den entsprechenden Arrayelementen erhalten bleibt.
    Konrad

    In a world without walls and fences, who needs Windows and Gates ?
    (Sun Microsystems)

    Kommentar


    • #3
      Es ändert sich die Reihenfolge der Indizes.


      Hmm...mir fällt da einfach kein optimaler Code ein:
      PHP-Code:
      $top $olor;
      arsort ($top);
      array_splice ($top4);

      foreach(
      $olor as $key => $value) {
       if (!isset(
      $top[$key])) {
        unset(
      $olor[$key]);
       }

      ]

      Kommentar


      • #4
        stimmt die zuordnung index -> wert noch und hast du die 4 größten werte?

        geb doch mal ein beispiel
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          ja, aber wenn ich nen array hab, der z.b. so aussieht:

          PHP-Code:
          $array1 = array('name1',  'name2',  'name3',);
          $array2 = array('1',  '2',  '3'); 
          So, jetzt will ich in array 2 die beiden größen werde lassen, also amch ich das was ich oben geschreiben habe....

          PHP-Code:
          $array1 = array('name1',  'name2',  'name3',);
          $array2 = array('3',  '2'); 

          Dann sieht es so aus, und wenn ich dann den passenden werd zu array1[1] haben will war das vorher array2[1], nämlich 1 ist nun aber 3... verstanden?
          nein?

          Kommentar


          • #6
            warum arbeitest du mit 2 arrays?
            PHP-Code:
            $array=array
            (
            => 'name1',
            => 'name2',
            => 'name3'
            ); 
            arsort sortiert dir jetzt nach werten und krsort nach schlüsseln/indizes
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Was denn? Nun sind es 2 Arrays?

              http://www.php.net/manual/de/language.types.array.php

              Ein Array in PHP ist eigentlich eine geordnete Abbildung. Eine Abbildung ist ein Typ der Werte auf Schlüssel abbildet.
              Konrad

              In a world without walls and fences, who needs Windows and Gates ?
              (Sun Microsystems)

              Kommentar


              • #8
                Original geschrieben von mrhappiness
                warum arbeitest du mit 2 arrays?
                PHP-Code:
                $array=array
                (
                => 'name1',
                => 'name2',
                => 'name3'
                ); 
                arsort sortiert dir jetzt nach werten und krsort nach schlüsseln/indizes
                ich arbeite mit mehr als 2 arrays wo alle die index werte für eine zusammengehörende kette stehen. Deswegen sollte der Wert den gleichen Index behalten.
                nein?

                Kommentar


                • #9
                  Wenn alle Arrays die selben keys haben, sollte es doch gehen?
                  Konrad

                  In a world without walls and fences, who needs Windows and Gates ?
                  (Sun Microsystems)

                  Kommentar


                  • #10
                    habe sie vor dem sortieren ja, aber nach dem sortieren ist array2[1] (davor) != array2[1] (danach)
                    nein?

                    Kommentar


                    • #11
                      dann vergeb für alle arrays feste indizes so wie ich in meinem beispiel, die bleiben dann für alle gleich und gut is
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        PHP-Code:
                        $array1[1] = "name1";
                        $array1[2] = "name2";
                        $array1[3] = "name3";

                        $array2[1] = 1;
                        $array2[2] = 2;
                        $array2[3] = 3
                        Wenn ich nun den Wert 3 aus $array2 nehme und mir den key hole, ist der [3]. Den key in $array1 eingesetzt gibt mir "name3".

                        So, nun bei $array2 die beiden größten
                        PHP-Code:
                        $array2[2] = 2;
                        $array2[3] = 3
                        Wenn ich nun den Wert 3 aus $array2 nehme und mir den key hole, ist der [3]. Den key in $array1 eingesetzt gibt mir "name3".

                        array_splice kickt die keys, also musst Du eine eigene Funktion bauen:
                        PHP-Code:
                        function array_kslice ($array$offset$length 0) {
                        $k array_slice (array_keys ($array), $offset$length);
                        $v array_slice (array_values ($array), $offset$length);
                        for (
                        $i 0$i count ($k); $i ++) $r[$k[$i]] = $v[$i];
                        return 
                        $r;

                        oder auch

                        PHP-Code:
                        function _array_slice$array$offset$limit)
                        {
                            
                        $max $limit+$offset-1;
                            for(
                        $x=0$x<$offset$x++)
                            {
                                
                        next($array);
                            }
                            for(
                        $y=$offset$y<=$max$y++)
                            {
                                
                        $key key($array);
                                
                        $new_array[$key] = current($array);
                                
                        next($array);
                            }
                            return 
                        $new_array;

                        Hoffe das war es jetzt.

                        P.S.: Aber wozu x Arrays mit den selben Keys? Mach ein mehrdimensionales Array draus, dann haste die Keys nur einmal und das Problem nicht. Allerdings muss man dann wissen, wie man ein mehrdimensionales Array nach einem Wert sortiert. *g*
                        Aber dazu findet sich hier sicher etwas.
                        Konrad

                        In a world without walls and fences, who needs Windows and Gates ?
                        (Sun Microsystems)

                        Kommentar

                        Lädt...
                        X