nebeneinander liegende felder in gruppen sortieren

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

  • nebeneinander liegende felder in gruppen sortieren

    mein problem ist folgendes:

    ich habe ein array mit koordinatenangaben. nun sollen alle einträge die nachbarfelder haben (koordinate +1 in jede richtung) in eine gruppe sortiert werden.

    falls mehr als ein feld abstand ist soll eine neue gruppe erstellt werden. ($key++)

    die gruppen kommen in ein neues array.

    hier ein beispiel fürs erste array:
    $coords[0] = array("left"=>15, "top"=>5);
    $coords[5] = array("left"=>16, "top"=>5);
    $coords[3] = array("left"=>25, "top"=>0);
    $coords[19] = array("left"=>14, "top"=>5);
    $coords[67] = array("left"=>15, "top"=>2);
    $coords[2] = array("left"=>13, "top"=>5);
    $coords[13] = array("left"=>1, "top"=>2);
    usw.


    und die ausgabe:
    $grp[0][0] = array("left"=>??, "top"=>??);
    $grp[0][1] = array("left"=>??, "top"=>??);
    $grp[0][2] = array("left"=>??, "top"=>??);
    $grp[0][3] = array("left"=>??, "top"=>??);
    $grp[1][0] = array("left"=>??, "top"=>??);
    $grp[1][1] = array("left"=>??, "top"=>??);
    usw.

    hab es schon mit schleifen und rekursiver funktion versucht und bin gescheitert

    vielen dank für die hilfe!
    RTFM!!!

  • #2
    poste mal, wie das array aussehen soll

    Kommentar


    • #3
      danke aber habs mittlerweile gelöst
      RTFM!!!

      Kommentar


      • #4
        dann poste doch bitte die lösung, damit andere user da in zukunft auch was von haben.

        Kommentar


        • #5
          PHP-Code:
          function look4areale($w) {
              
          $areale = array();
              
          $aid 0;
              while (
          count($w) > 0) {
                  
          $k array_keys($w);
                  
          $item $w[$k[0]];
                  
          $areale[$aid][] = $item;
                  unset(
          $w[$k[0]]);
                  
          chkareal($item$areale$aid$w);
                  
          $aid++;
              }
              return 
          $areale;
          }

          function 
          chkareal($item, &$areale, &$aid, &$w) {
              
          $left $item["xleft"];
              
          $top $item["xtop"];
              foreach (
          $w as $k=>$b) {
                  if ( (
          $b["xleft"] == $left-&& $b["xtop"] == $top)    // links
                   
          || ($b["xleft"] == $left+&& $b["xtop"] == $top)    // rechts
                   
          || ($b["xleft"] == $left-&& $b["xtop"] == $top-1)    // links oben
                   
          || ($b["xleft"] == $left+&& $b["xtop"] == $top-1)    // rechts oben
                   
          || ($b["xleft"] == $left-&& $b["xtop"] == $top+1)    // links unten
                   
          || ($b["xleft"] == $left+&& $b["xtop"] == $top+1)    // rechts unten
                   
          || ($b["xleft"] == $left && $b["xtop"] == $top-1)    // oben
                   
          || ($b["xleft"] == $left && $b["xtop"] == $top+1) ) {    // unten
                       
          $areale[$aid][] = $b;
                       unset(
          $w[$k]);
                       
          chkareal($b$areale$aid$w);
                   }
              }

          RTFM!!!

          Kommentar

          Lädt...
          X