Gruppierung mal anders

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

  • Gruppierung mal anders

    Hallo Community,

    mir wurde hier schon des öffteren geholfen, deshalb möchte ich mich auch als erstes hier melden.

    z.Z stehe ich vor einer Aufgabe die wie folgt aussieht.

    Ein Benutzer gibt tausende wahllos ausgedachte ID's in ein Array ein.
    Alle ID's sind nummerisch.

    Nun habe ich also ein Array sagen wir in der Form
    PHP-Code:
    array(
    [
    id]     [Values]
    '1' => '1000',
    '2' => '1023',
    '3' => '1011',
    '4' => '1990',
    '5' => '1561',
    '6' => '5',
    '7' => '800',
    '8' => '3000',
    '9' => '999456',
    '10' => '30',
    .... 
    usw.
    ); 
    Ich möchte nun die Values des Arrays [Values] Gruppieren.

    Jetzt weiß ich ja nicht von vornherein welche Bereiche der Nummern der Benutzer abgedeckt hat.
    In etwa so : 0 -1000 , 1001 - 2000 , 2001 - 3000 usw.

    Also möchte ich ähnliche Values mit einander Gruppieren.
    in etwa nach dem obigen Beispiel Array
    müsste ich eine Gruppierung haben :

    Gruppe 1 = 5
    Gruppe 2 = 1000,1023,1011,1990
    Gruppe 3 = 800
    Gruppe 4 = 3000
    Gruppe 5 = 999456
    Gruppe 6 = 30
    usw.

    Irgendwie fehlt mir der Bezug zu den Bereichen der Zahlen wie ich die Einträge in Gruppen definiere.


    Ich bräuchte also in etwa einen Denkanstoß.

    Wenn Ihr fragen habt dann fragt bitte.
    Hoffe ich war einwenig verständlich.

    LG
    Postaria

  • #2
    Dekanstoß hört sich erstmal nach Brainstorming an.

    Das Problem was du hast ist zudem weniger die Umsetzung, als das logische Konzept, welches dir z.Zt. noch fehlt.

    Wenn du uns keinen Algorithmus nennen kannst, nach dem du die Werte sortiert haben willst, wird es schwierig.

    In meinen Augen ist dein Beispiel schon total verkorkst.

    Erklär mir doch mal bitte, warum 5, 30 und 800 jeweils eine eigene Gruppe bilden, 1000,1011,1023 und 1990 aber gemeinsam in einer Gruppe landen?

    Also, du musst erstmal wissen, was du willst.

    Vielleicht kommst du eher drauf, wenn du dein vorhaben mal genauer und weniger abstrakt bezeichnest.

    Kommentar


    • #3
      Hallo,

      hier eine Lösung, welche auch mit assoziativen Arrays umgehen kann, ohne die Zuordnungen zu zerstören:

      PHP-Code:
          function groupValues (array $pValues) {
              
      asort($pValues);
              
      $deltas = array();
              
      $last null;
              foreach (
      $pValues as $k => $v) {
                  if (!
      is_null($last) && $v $pValues[$last] > 0) { // EDIT
                      
      $deltas[] = $v $pValues[$last];
                  }
                  
      $last $k;
              }
              
      $delta .0001 ceil(10000 array_sum(array_map("log"$deltas)) / count($deltas)); // EDIT
              
      $result = array();
              
      $current = array();
              
      $last null;
              foreach (
      $pValues as $k => $v) {
                  if (!
      is_null($last) && log($v $pValues[$last]) > $delta) {
                      
      $result[min($current) . ".." max($current)] = $current;
                      
      $current = array();
                  }
                  
      $current[$k] = $v;
                  
      $last $k;
              }
              if (
      $current) {
                  
      $result[min($current) . ".." max($current)] = $current;
              }
              return 
      $result;
          } 
      Da kommt zwar eine andere Gruppierung raus als die vorgegebene, aber vielleicht passt es ja trotzdem.

      Gruß,

      Amica
      Zuletzt geändert von AmicaNoctis; 05.03.2010, 15:02.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Edit : Oh sehe gerade ich habe zu lange geschrieben :/ mal die Funktion ausprobieren.



        Genau da liegt ja auch der Hund begraben.

        Die oben genannte Lösung habe ich mir getreu dem Motto ähnliches zu ähnlichen zusammengeschustert.

        also
        Gruppe 1: 0-10 -- 10er Gruppe
        Gruppe 2: 1.000 - 1.999 -- 1000er Gruppe
        Gruppe 3: 100 - 999 -- 100er Gruppe weil (Gruppe 6 Existieren wird)
        Gruppe 4: 3.000 - 3.999 -- wie Gruppe 2
        Gruppe 5: 100.000 - 999.999 -- 100.000er Gruppe
        Gruppe 6: 10 - 99 -- 10er Gruppe wegen Gruppe 1

        Naja ich kam halt auf die Gruppierung weil der Benutzer sich das Array anzeigen kann und halt bei mehreren tausend Einträgen würde das Ergebniss elendig lang sein. Kann es halt über eine maximale Ausgabe der Einträge zwar Seitenweise ausgabe der Ergebnisse steuern, will dies anweden wenn die Gruppierung nicht geht.

        Also wie du ja schon sagtest fehlt mir das Konzept für die Gruppen zuweisung.

        Ich könnte was mir jetzt gerade einfällt die Stellen zählen lassen und diese jeweils Gruppieren. Sprich 10er 100er 1.000er 100.000er.
        Was aber naja zumindestens bei den Gruppen ab 100 ja schon viel wird zum anzeigen.


        Also irgendwie möchte ich halt dem Benutzer langen Listen ersparen die er ggf. angezeigt bekommen wird.

        LG

        Postaria

        Kommentar


        • #5
          Wäre cool, wenn du dich noch zu meiner Lösung äußern könntest...

          Edit: achso, hat sich erledigt
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Irgendwie höre ich als einziges Problem die Größe der Gruppen heraus?

            Also Anzahl aller Zahlen / Max. Größe pro Gruppe = Anzahl Gruppen.

            Nicht schön, aber dein Problem gelöst.

            Wenn nicht, dann solltest du wie gesagt konkreter werden.

            Kommentar


            • #7
              Richtig das Problem vorerst gelöst !
              AmicaNoctis ich Danke dir.

              und ja TobiaZ über die delta variable bin ich auch gestolpert

              Aber die Ausgabe ist soweit ganz gut und der Benutzer kann nun die Anzeige Gruppenweise anschauen.

              aber auf die Idee wär ich warscheinlich nicht selber gekommen.


              Ich danke euch beiden.

              Falls ich die Funktion einwenig anpasse lasse ich es euch wissen.


              LG

              Postaria

              Kommentar

              Lädt...
              X