Sortierung zwei-Dimensionaler Array in Koordinatensystem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Sortierung zwei-Dimensionaler Array in Koordinatensystem

    Hi EasyCoders,

    ich hänge gerade etwas an folgendem Problem, vielleicht habt ihr etwas Input, das mir auf die Spünge hilft:

    Ich habe Elemente, die 2 numerische Werte haben und abhängig von diesen Werten in eine Art Gitternetz system in der richtigen Reihenfolge geladen werden sollen.
    [Blockierte Grafik: http://i47.tinypic.com/2dw5lkw.jpg]

    Quellcode

    1. #Array Format:
    2. Array ( [0] => Array ( [x] => 9.63 [y] => 9.54 ) [1] => Array ( [x] => 9.32 [y] => 9.33 ) [2] => Array ( [x] => 5.55 [y] => 9.3 ) [3] => Array ( [x] => 9.44 [y] => 5.66 ) )

    Was mit Kopfschmerzen bereitet ist wie ich den array so sortiere/splitte und dann foreach ausführe, dass x absteigend ist und in der nächsten Zeile wieder beim Nächst-Höchsten Wert beginnt. Denke es ist eine Kombination aus array_multisort, array_chunk aber das splitten über die X-Achse für die 6 höchsten Y-Werten will mir nicht in den Kopf. :huh:

    Oder muss man das mit zwei Arrays machen?

    Für jeden Tipp dankbar!
    Dennis
  • Hi,

    danke für die schnelle Antwort, usort war die Lösung man muss nur über die Sortierten noch einmal für die andere Achse drüber sortieren.

    Quellcode

    1. <?php
    2. $arr = array();
    3. for($i = 0; $i < 100; $i++){
    4. $x = round(rand() / getrandmax() * 10,2);
    5. $y = round(rand() / getrandmax() *10,2);
    6. array_push($arr, array("x" => $x, "y" => $y,"id" => $i)) ;
    7. }
    8. function ysort ($valA, $valB ) {
    9. if ( $valA['y'] === $valB['y'] )
    10. return 0;
    11. if ( $valA['y'] > $valB['y'] )
    12. return -1;
    13. return +1;
    14. }
    15. function xsort ($valA, $valB ) {
    16. if ( $valA['x'] === $valB['x'] )
    17. return 0;
    18. if ( $valA['x'] > $valB['x'] )
    19. return -1;
    20. return +1;
    21. }
    22. usort ( $arr, 'ysort' );
    23. $row = 1;
    24. $presorted = array_chunk($arr,10,true);
    25. foreach ($presorted as $value){
    26. usort($value,"xsort");
    27. $sorted[$row] = $value;
    28. $row++;
    29. }
    30. $row = 1;
    31. foreach($sorted as $key => $value){
    32. echo '<div style="clear:both;">';
    33. $col = 1;
    34. foreach($value as $key2 => $element){
    35. echo '<div style="float:left; margin:5px; background:#fff; height:50px; width:50px;">'."$col / $row ".$element["x"].'/'.$element["y"].'</div>';
    36. $col++;
    37. }
    38. echo '</div>';
    39. $row++;
    40. }
    41. ?>
    Alles anzeigen


    Und zack hat man eine schöne Matrix nach X und Y sortiert :D :
    [Blockierte Grafik: http://i50.tinypic.com/339j5t5.jpg]

    Besten Dank!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von student2312 ()