Your-pMF
     registrieren     benutzer     suche     team     kalender     hilfe     index    
Chat     downloads     link us     gästebuch     supportforum    
 

.1 Suche: Sortierte Onlineliste

original Thema anzeigen

29.10.04, 14:39:07

René

Hiho, die Onlineliste (und die wer war schon Onlineliste) sind nicht sehr schön sortiert. Wenn man - wie bei mir - zwischen 09-15:00 Uhr immer so ~35 Menschen Online hat und am Tag mehr als 350, verliert man doch schnell den Überblick. ;) In index.php steht folgendes: [PHP]# # ### Online Liste $online_list = ''; if (!empty($_config['INDEX_ONLINE'])) { $liste = array(); $time = PMF_TIME-$_config['ONLINE_TIMEOUT']; $online_users = 0; $online_guests = $_online['guest']; if (is_array($_online['member'])) { foreach ($_online['member'] AS $id => $val) { if ($_online['member'][$id]['last_action'] >= $time) { $online_users++; $liste[] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).''; } } $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; } }[/PHP] Ein einfaches implode(', ', sort($liste) : ''; führte nur dazu, das die Liste weg ist. Hat jemand ne Idee dazu?
29.10.04, 15:44:08

BugHunter2k

schreib doch vor das $liste in dem implode eine sortierfunktion (z.b. asort)
01.11.04, 08:40:49

René

Das habe ich ja gemacht! Die Liste bleibt dann aber leer! :(
01.11.04, 11:11:56

BugHunter2k

sortier das array $_online['member']das solte klappen
01.11.04, 14:16:26

mdg-webmaster

Wenn das Funktioniert könnte das dann jemand nochmal komplett erklären? mdg-webmaster
02.11.04, 11:20:19

René

geändert von: René - 02.11.04, 11:20:48

Online geht immer noch nicht, aber Online-Today geht. :) Folgendes steht in der index.php: [PHP]# # ### heute bereits Online $today_online_list = ''; if (!empty($_config['INDEX_TODAY_ONLINE'])) { $liste = array(); $result = $_db->query('SELECT u.`id`, u.`name`, g.`wio_color` FROM `'.$_cfg['DB_PREFIX'].'user` AS u, `'.$_cfg['DB_PREFIX'].'group` AS g WHERE u.`last_action` > '.mktime(0, 0, 0, date('m'), date('d'), date('Y')).' AND u.`group_id` = g.`id` GROUP BY u.`id`');[/PHP] und das sollte da stehen: [PHP]# # ### heute bereits Online $today_online_list = ''; if (!empty($_config['INDEX_TODAY_ONLINE'])) { $liste = array(); $result = $_db->query('SELECT u.`id`, u.`name`, g.`wio_color` FROM `'.$_cfg['DB_PREFIX'].'user` AS u, `'.$_cfg['DB_PREFIX'].'group` AS g WHERE u.`last_action` > '.mktime(0, 0, 0, date('m'), date('d'), date('Y')).' AND u.`group_id` = g.`id` GROUP BY u.`id` ORDER BY u.`name`');[/PHP] Eine Zeile einfügen und das '); an die richtige Stelle verschieben. --- Aber bei der Online-Liste breche ich mir immer noch die Finger! :( Das hier z.B. bringt überhaupt nichts: [php]# # ### Online Liste $online_list = ''; if (!empty($_config['INDEX_ONLINE'])) { $liste = array(); $time = PMF_TIME-$_config['ONLINE_TIMEOUT']; $online_users = 0; $online_guests = $_online['guest']; if (is_array($_online['member'])) { asort( $_online['member'] ); foreach ($_online['member'] AS $id => $val) { if ($_online['member'][$id]['last_action'] >= $time) { $online_users++; $liste[] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).''; } } $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; } }[/php]
02.11.04, 12:33:18

the-tester

geändert von: the-tester - 02.11.04, 12:35:24

Aus [php] $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; [/php] wird: [php] sort($liste); $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; [/php] Sortierreihenfolge ist: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ € § ´ Ä Ö Ü ä ö ü [color=red]edit/[/color] Bachte die maximale Array-Größe! Wenn die zu groß ist, muss Du manuell ein neues Array erstellen... Bei übertragen dann per Einzelfallvergleich eine Art Bubblesort durchführen.
03.11.04, 10:25:23

René

Damit "verändert" er zwar die Liste, aber eine alphabetische Namensliste ist es noch lange nicht! Ist auch verständlich, da in $liste ja bereits die Links enthalten sind, also das
03.11.04, 12:00:21

the-tester

geändert von: the-tester - 03.11.04, 12:49:13

Wie gesagt, dann manuell bubble-sortieren! Zwei Alternativen... Beide ungetestet! Ewig langsam aber wirksam ist Bubblesort (schnellere Alternative folgt am Ende): [php] # # ### Online Liste $online_list = ''; if (!empty($_config['INDEX_ONLINE'])) { $liste = array(); $listname = array(); $time = PMF_TIME-$_config['ONLINE_TIMEOUT']; $online_users = 0; $online_guests = $_online['guest']; if (is_array($_online['member'])) { foreach ($_online['member'] AS $id => $val) { if ($_online['member'][$id]['last_action'] >= $time) { $online_users++; $liste[] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).''; $listname[] = $val['name']; } } for ($bubble_i=1; $bubble_i<=$online_users-1; $bubble_i++) { for ($bubble_j=1; $bubble_j<=$online_users-1-$bubble_i; $bubble_j++) { if ($listname[$bubble_j+1] < $listname[$bubble_j]) { $bubble_name = $listname[$bubble_j]; $bubble = $liste[$bubble_j]; $listname[$bubble_j] = $listname[$bubble_j+1]; $liste[$bubble_j] = $liste[$bubble_j+1]; $listname[$bubble_j+1] = $bubble_name; $liste[$bubble_j+1] = $bubble; } } } $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; } } [/php] Oder Du machst es mit einem tmp. Array: [php] # # ### Online Liste $online_list = ''; if (!empty($_config['INDEX_ONLINE'])) { $liste = array(); $tmpliste = array(); $time = PMF_TIME-$_config['ONLINE_TIMEOUT']; $online_users = 0; $online_guests = $_online['guest']; if (is_array($_online['member'])) { foreach ($_online['member'] AS $id => $val) { if ($_online['member'][$id]['last_action'] >= $time) { $online_users++; $tmpliste[$val['name']] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).''; } } #tmp. Liste nach Schlüssel - also Namen - sortiern: ksort($tmpliste); #und die Liste erstellen: $tmpliste=array_values($tmpliste); $lstelmnt=1; while ($lstelmnt<=$online_users) { $liste[$lstelmnt]=$tmpliste[$lstelmnt-1]; $lstelmnt++; } $online_list = (count($liste) > 0) ? implode(', ', $liste) : ''; } } [/php] [color=red]edit/[/color] Man (nicht ich) müsste dich aber noch überlegen, ob man nicht die Namen im Array-Key mittels strtoupper() groß macht, damit die Sortierung auch wirklich stimmt... Denn so werden die drei User "tester klein", "The-Tester" und "Tester groß" wie folgt sortiert: "Tester groß", "The-Tester", "tester klein". strtoupper() liefert da: "Tester groß", "tester klein", The-Tester".
04.11.04, 10:16:46

René

Vielen Dank, ganz hervorragend! :) Alternative zwei funktioniert prima und wird hier jetzt eingesetzt. Glasse...:cool:
04.11.04, 10:43:59

the-tester

Für Namenskorrekte Sortierung (sie Edit im letzten Beitrag) in meiner 2. Variante Zeile 14 ersetzen durch: [php] $tmpliste[strtoupper($val['name'])] = ''.(($val['wio_color']) ? ''.$val['name'].'' : $val['name']).''; [/php]
04.11.04, 12:50:05

René

Auch das klappt prima. DANKE! :) habe schon die nächste Hack-Suche...
04.11.04, 14:58:28

mdg-webmaster

Soo, könnte das jetzt nochmal ener schön sauber und Ordentlich als Hack aufschreiben? ;) mdg-webmaster
04.11.04, 15:16:33

the-tester

geändert von: Sperber - 04.11.04, 17:26:17

Da ist alle kompakt: http://www.your-pmf.de/topic.php?id=484& *themaschließ* :closed:
 
Powered by: phpMyForum 4.2.1 © Christoph Roeder
SQL Error