bez steigas un prātīgi. x_f funkcija par vislielākā ierakstu skaita īpašniekiem draugu lapā, pabeigta un pārredzamāka par tiem manis publicētajiem variantiem iepriekš.
########## #wizard'ā maināmie uzstādījumi ########## property int top { des = "Rakstītāju tops"; note = "Draugu lapā tiek izvadīts (ja tas ir norādīts) saraksts ar vislielākā ierakstu skaita īpašniekiem dilstošā secībā, šeit nosaki šī saraksta limitu - top 3, top 5 utml. Negatīvi skaitļi nav iespējami, minimālais ir 1"; min = 1; } property bool printeet_topu { des = "Rakstītāju topa rādīšana"; note = "Vai vēlies savā draugu lapā vispār ieraudzīt iepriekšminēto sarakstu?"; values = "true|Protams!|false|Priekš kam?"; } set top = 3; set printeet_topu = true; ######### #pati funkcija ######### function tops(Entry[] entries) "Spamertopiņš" { #galvenais masīvs, kurā glabāsies visi draugu lapā redzamo ierakstu autori var string{} rakstnieki; #pirms jebkā veikšanas masīvs tiek aizpildīts ar autoriem no katra ieraksta. #šī te lietiņa aizstāj to, kas nedarbojās (es gan nesapratu, kāpēc) x-f iepostotajā funkcijā, #tajā masīvs praktiski netika aizpildīts ar neko. autora vārds kalpo kā atslēgvārds #ierakstu skaitam, šeit visiem norādīts ierakstu skaits 0. foreach var Entry ieraksts ($entries) { var string autors = $ieraksts.poster.username; $rakstnieki{$autors} = "0"; } #katrs ieraksts tiek pārbaudīts. ja autors sakrīt ar kādu autoru no masīva, #attiecīgais masīva elements tiek palielināts par vienu vienību. foreach var Entry ieraksts($entries) { var string autors = $ieraksts.poster.username; var int raksti; foreach var string parbaude ($rakstnieki) { if ($parbaude == $autors){ $raksti = int($rakstnieki{$parbaude}); $raksti++; $rakstnieki{$parbaude} = string($raksti); } } } #sakārtošana dilstošā secībā. vispirms tiek atrasts vislielāka ierakstu skaita #īpašnieks, respektīvi, no masīva atlasīts atslēgvārds ar vislielāko elementa vērtību. var int max = 0; var string lideris; foreach var string rakstija ($rakstnieki) { if (int($rakstnieki{$rakstija}) > $max) { $lideris = $rakstija; $max = int($rakstnieki{$rakstija}); } } "<ul id='top_list'>"; print "<li>$lideris (" + $rakstnieki{$lideris} + ")</li>"; #atrasts 'uzvarētājs'. $*top pats par sevi man bija vajadzīgs, lai radītu #parastu (laikam regulārs saucas) masīvu $cycle ar elementu skaitu, kas vienāds ar $*top. #masīva elementi nav svarīgi, svarīgs ir skaits. ja $*top ir lielāks par autoru skaitu #$rakstnieki masīvā, regulārā masīva elementu skaits tiek samazināts līdz $rakstnieki #elementu skaitam. var int count = 1; var int[] cycle = 1 .. $*top; if (size $rakstnieki < size $cycle) { $cycle = 1 .. size $rakstnieki; } foreach var int top ($cycle) { if ($count == size $cycle) { } else { foreach var Entry ieraksts ($entries) { var string autors = $ieraksts.poster.username; #visi ieraksti tiek pārbaudīti. ja ieraksta autors jau ir 'uzvarētājs', #attiecīgais $rakstnieki elements tiek padarīts par 'neko', tam nav vērtības, #un to vairs neiekļauj nākamā uzvarētāja meklēšanā. if ($lideris == $autors) { $rakstnieki{$autors} = ""; } } $max = 0; foreach var string rakstija ($rakstnieki) { if (int($rakstnieki{$rakstija}) > $max) { $lideris = $rakstija; $max = int($rakstnieki{$rakstija}); } } print "<li>$lideris (" + $rakstnieki{$lideris} + ")</li>"; $count++; } } "</ul>"; } function FriendsPage::print_body { if ($*printeet_topu == true) { tops($.entries); } # tālāk visa pārējā "FriendsPage::print_body" funkcija.. foreach var Entry e ($.entries) { # .. $this->print_entry($e); # .. } }
(Ņem vērā, ka parasti neviens neizvēlas atbildēt uz pilnīgi anonīmiem komentāriem!)