kleinsten einträge aus array löschen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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)

    Comment


    • #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]);
       }

      ]

      Comment


      • #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...

        Comment


        • #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?

          Comment


          • #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...

            Comment


            • #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)

              Comment


              • #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?

                Comment


                • #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)

                  Comment


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

                    Comment


                    • #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...

                      Comment


                      • #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)

                        Comment

                        Working...
                        X