php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 19.05.2011, 19:12  
Neuer Benutzer
 
Registriert seit: 19.05.2011
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
Samson1964 befindet sich auf einem aufstrebenden Ast
Standard Kreuztabelle sortieren

Hat zufällig jemand einen Algorithmus für das Sortieren einer Kreuztabelle? Die Ursprungstabelle liegt in einer Datei vor und sieht wie folgt aus:
Code:
Nr.;Spieler;DWZ ;Klub;Pkt.;SoBe ;1;2;3;4;5;6;7;8;9;10
 1.;Name 01;1981;BeMi;5,5 ;     ;x;1;0;0;½;1;1;0;1;1
 2.;Name 02;2099;BeMi;5,0 ;     ;0;x;0;½;1;0;1;½;1;1
 3.;Name 03;2006;Kreu;7,0 ;28,50;1;1;x;½;½;½;½;1;1;1
 4.;Name 04;2076;Pank;7,0 ;27,50;1;½;½;x;0;1;1;1;1;1
 5.;Name 05;1890;BeMi;4,5 ;     ;½;0;½;1;x;½;0;1;0;1
 6.;Name 06;1880;QuSp;4,0 ;     ;0;1;½;0;½;x;½;½;1;0
 7.;Name 07;1875;Empo;3,5 ;13,25;0;0;½;0;1;½;x;½;0;1
 8.;Name 08;1792;BeMi;3,5 ;13,25;1;½;0;0;0;½;½;x;0;1
 9.;Name 09;1872;Zita;3,5 ;12,25;0;0;0;0;1;0;1;1;x;½
10.;Name 10;1847;Lask;1,5 ;     ;0;0;0;0;0;1;0;0;½;x
Das Einlesen in ein zweidimensionales Array und das Sortieren nach der Spalte Pkt. und SoBe dürfte ja noch einfach sein. Nach dieser Sortierung sieht die Tabelle wie folgt aus:
Code:
Nr.;Spieler;DWZ ;Klub;Pkt.;SoBe ;1;2;3;4;5;6;7;8;9;10
 3.;Name 03;2006;Kreu;7,0 ;28,50;1;1;x;½;½;½;½;1;1;1
 4.;Name 04;2076;Pank;7,0 ;27,50;1;½;½;x;0;1;1;1;1;1
 1.;Name 01;1981;BeMi;5,5 ;     ;x;1;0;0;½;1;1;0;1;1
 2.;Name 02;2099;BeMi;5,0 ;     ;0;x;0;½;1;0;1;½;1;1
 5.;Name 05;1890;BeMi;4,5 ;     ;½;0;½;1;x;½;0;1;0;1
 6.;Name 06;1880;QuSp;4,0 ;     ;0;1;½;0;½;x;½;½;1;0
 7.;Name 07;1875;Empo;3,5 ;13,25;0;0;½;0;1;½;x;½;0;1
 8.;Name 08;1792;BeMi;3,5 ;13,25;1;½;0;0;0;½;½;x;0;1
 9.;Name 09;1872;Zita;3,5 ;12,25;0;0;0;0;1;0;1;1;x;½
10.;Name 10;1847;Lask;1,5 ;     ;0;0;0;0;0;1;0;0;½;x
Jetzt sind allerdings die Spalten mit den Ergebnissen durcheinander. Die Spalten 1 bis 10 müssen jetzt analog der Zeilensortierung angeordnet werden. Das ist dann wohl der schwierigere Teil in PHP.

Das Endergebnis muß dann wie folgt aussehen:
Code:
Nr.;Spieler;DWZ ;Klub;Pkt.;SoBe ;3;4;1;2;5;6;7;8;9;10
 3.;Name 03;2006;Kreu;7,0 ;28,50;x;½;1;1;½;½;½;1;1;1
 4.;Name 04;2076;Pank;7,0 ;27,50;½;x;1;½;0;1;1;1;1;1
 1.;Name 01;1981;BeMi;5,5 ;     ;0;0;x;1;½;1;1;0;1;1
 2.;Name 02;2099;BeMi;5,0 ;     ;0;½;0;x;1;0;1;½;1;1
 5.;Name 05;1890;BeMi;4,5 ;     ;½;1;½;0;x;½;0;1;0;1
 6.;Name 06;1880;QuSp;4,0 ;     ;½;0;0;1;½;x;½;½;1;0
 7.;Name 07;1875;Empo;3,5 ;13,25;½;0;0;0;1;½;x;½;0;1
 8.;Name 08;1792;BeMi;3,5 ;13,25;0;0;1;½;0;½;½;x;0;1
 9.;Name 09;1872;Zita;3,5 ;12,25;0;0;0;0;1;0;1;1;x;½
10.;Name 10;1847;Lask;1,5 ;     ;0;0;0;0;0;1;0;0;½;x
Als kosmetische Arbeiten wären jetzt noch die Nummern in Spalte 1 und die Ergebnisspalten in Zeile 1 anzupassen.

Hat jemand eine Idee wie das in PHP zu realisieren wäre?
Samson1964 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.05.2011, 19:39  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Folgende Funktion sortiert ein Array und gibt dir die Möglichkeit, selbst anzugeben was passiert wenn dadurch zwei Einträge vertauscht müssen:

PHP-Code:
/**
 * @param array $array Input array
 * @param callback $cmp Comparison function
 * @param callback $swap Swap function
 * @return array The sorted array
 */
function susort($array$cmp$swap)
{
  
$size array_size($array);

  
// normalize keys
  
$array array_combine(range(0$size-1), $array);

  
//sort
  
for ($i 0$i $size-1; ++$i)
  {
    for (
$j $i+1$j $size; ++$j)
    {
      if (
$cmp($array[$i], $array[$j]) < 0)
      {
        
$swap($array$i$j);
      }
    }
  }
  return 
$array;

Der Parameter $cmp ist eine Funktion, die ungefähr so aussieht:
PHP-Code:
/**
 * @param array $p1 Array with data from one player
 * @param array $p2 Array with data from the other player
 * @return -1 iff Player $p1 < Player $p2
 *    1 iff Player $p1 > Player $p2
 *    0 iff Player $p1 == Player $p2
 */
function compare_players($p1$p2)
{
  
// TODO: implement

Die Vertauschungsfunktion $swap sieht ungefähr so aus.
PHP-Code:
/**
 * @param array &$array The array to be sorted
 * @param int $i Index of one player
 * @param int $j Index of the other player
 */
function swap_players(&$array$i$j)
{
  
$tmp $array[$i];
  
$array[$i] = $array[$j];
  
$array[$j] = $tmp;
  foreach (
array_keys($array) as $key)
  {
    
// TODO: Swap column $i and column $j of results in $array[$key].
  
}

Problem ist noch, wie du die Reihenfolge der drei Spieler von Zitadelle Spandau, Berolina Mitte und Empor Berlin festlegst; die haben ja alle die gleiche Punktzahl und gleiche Sonneborn-Berger-Wertung. Falls die Reihenfolge z.B. anhand des Dirketen Vergleichs bestimmt werden soll, dann musst du compare_players so umschreiben, das als dritter Parameter das Array angegeben werden kann und dort dann nach Punkt- und SoBe-gleichen Spielern suchen.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

Geändert von mimomamu (19.05.2011 um 20:45 Uhr).
mimomamu ist offline   Mit Zitat antworten
Alt 19.05.2011, 19:40  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Du hast die Spalten 1-10 doch schon in einem Array, den musst du umgruppieren, so dass er nicht zeilenweise, sondern spaltenweise aufgebaut ist. Dann kannst du mit uasort() sortieren und den Zeilen wieder ihre Treffer zuweisen.

Vorschlag:
Datenbank benutzen
Ausnormalisieren
Englische Zahlennotation verwenden
1/2 in Dezimalschreibweise übernehmen

Das sieht mir nach antiquem Datenformat aus und bedarf wohl einer Generalüberholung
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 19.05.2011, 21:13  
Neuer Benutzer
 
Registriert seit: 19.05.2011
Beiträge: 2
PHP-Kenntnisse:
Fortgeschritten
Samson1964 befindet sich auf einem aufstrebenden Ast
Standard

@mimomamu: Oh, auch ein programmierender Berliner Schachspieler! Kein Anderer würde die Abkürzungen richtig deuten.
Den Programmcode muß ich mir durch den Kopf gehen lassen. Danke!

@Chriz: Antikes Datenformat? Ich will es dem Anwender (und mir) so einfach wie möglich machen. Die Tabelle wird ja nicht von einem Skript generiert, sondern ist bereits das Endprodukt, daß mir der Anwender liefert. Und der kann solch eine Tabelle mit einfachsten Mitteln erstellen. Ich will sie nur einlesen und sortiert als HTML-Tabelle ausgeben.

Natürlich könnte ich die als Datei gelieferte Tabelle in eine Datenbank einlesen, ausnormalisieren, in englische Zahlennotation umwandeln und das ½ ersetzen. Aber wozu?

Ansonsten ist Deine Idee mit den zwei Arrays natürlich interessant.
Samson1964 ist offline   Mit Zitat antworten
Alt 20.05.2011, 08:38  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Eigentlich schachspielender Softwareentwickler aus dem Rheinland. Aber vielleicht verschlägt es mich auch bald nach Berlin; bin zur Zeit auf Stellensuche.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden
mimomamu ist offline   Mit Zitat antworten
Alt 21.05.2011, 13:55  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Der Algorithmus für u(a)sort ist ganz einfach

PHP-Code:
function (row1row2) {
  if (
row1['col1'] == row2['col1']) {
    if (
row1['col2'] == row2['col2']) return 0;
    return (
row1['col2'] < row2['col2'] ? -1);
  }
  return (
row1['col1'] < row2['col1'] ? -1);

__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
array sortieren? thedarkknight PHP Einsteiger 10 16.05.2011 03:25
[Erledigt] Array sortieren Phoenix@ PHP Einsteiger 8 20.01.2011 16:23
[Erledigt] Textdatenbank zeilenweise alphabetisch sortieren - Drop Down Menü alphabet UdoDirk PHP Tipps 2010 1 24.07.2010 10:45
Array sortieren... BlackScorp PHP Tipps 2010 15 12.07.2010 08:20
Termin-Array sortieren (mehrdimensionaler Array) mumaha PHP Tipps 2009 1 13.11.2009 08:14
xml daten sortieren phpfischer PHP Tipps 2009 29 19.03.2009 16:22
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
solved: Sortieren von Dateiname A Hoppe PHP-Fortgeschrittene 3 14.11.2006 08:04
DECIMAL lässt sich nicht mit ORDER BY sortieren buggybugga Datenbanken 4 07.07.2006 15:43
Problem beim Sortieren PHP Tipps 2005-2 5 29.06.2005 07:00
multidim Array nach Inhalt und Key sortieren PHP Tipps 2005 1 20.05.2005 16:22
Termine sortieren Tschuu PHP Tipps 2005 12 18.05.2005 21:15
Array mit Gruppen: Wie Sortieren PHP Tipps 2005 2 29.01.2005 15:15
[Erledigt] Alphabetisch sortieren PHP Tipps 2004 17 15.07.2004 23:15
Sortieren nach Timestamp Datenbanken 5 01.06.2004 16:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array kreuztabelle, php-script kreuztabellen, schach kreuztabelle erstellen, kreuztabelle schach sortieren, sonneborn berger php, kreuztabelle sortierreihenfolge, javascript kreuztabelle, kreuztabelle sortierung, schach kreuztabelle, kreuztabelle in php, kreuztabellenabfrage sortieren, php html tabelle sortieren, php kreuztabelle, kreuzabfrage sortierung, php kreuztabelle mit arrays -office -tabellen, php kreuztabelle array, php sort 3 punkte regel, javascript kreuztabellen, uasort php drop down deutsch, kreuztabelle

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum