[PHP] Array probleem

Pagina: 1
Acties:

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
Het gaat hier waarschijnlijk om een simpel vraagje in de ogen van de meesten van jullie, toch kan ik er zelf helemaal niet uitkomen :o..

het script doet nu het volgende: ik heb een log, deze wordt uitgelezen, vervolgens gooi ik hieruit de hosts in $idarray en print ik uit.
nu wil ik het volgende nog: aangezien een member meerdere hosts kan hebben heb ik een mysql tabel gemaakt met daarin regels bestaande uit "host" en "member", er moeten nu dus nog stukken array worden samengevoegd (zodat op http://ruud.keyserver.org/test/subteam.php member1 op #1 en #3 bij elkaar worden opgeteld).

Ik heb het idee dat ik dit kan doen door op regel 49 een nieuwe array te beginnen met daarin membernamen en hun scores, maar dit wil me nog niet echt lukken (lees: echt niet), wie weet wel hoe het moet? ;)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?
set_time_limit(0);

$logmap="C:";
$totaal=0;
$teller=1;
$mysqluser="*******";
$mysqlpw="*******";

$tabelnaam=memberstats;
mysql_connect("localhost","$mysqluser","$mysqlpw");
mysql_select_db("proxy");

//open result.csv
//knip maar raak tot enkel de hosts overblijven

    $iparray=array();
    $log=fopen("$logmap\\Result.csv",'r');
    if ($log){
        while(!feof($log)){
//          regel voor regel wordt de log doorgenomen, de regel wordt in stukken gehakt bij de komma, daarna wordt van het
//          ip het id-nummer afgehaald. 
            $logregel=fgets($log,1024);
            $uitkomst = split (",,,",$logregel);
            $uitkomst2 = split (",",$uitkomst[1]);

//          als het id bestaat (dus geen witregel oid), wordt deze aan de array toegevoegd)
            if ($uitkomst2[1])$iparray[]=$uitkomst2[1];
//          de id's die meerdere keren voorkomen worden opgeteld
                }
        $idarray= array_count_values ($iparray);
    }
    else print "heb logfile niet kunnen openen";

print "<TABLE border=1>";
print "<TR><TD>Rank</TD><TD>Host</TD><TD>WorkUnits</TD></TR>";

//array wordt gesorteerd op aantal, hoogste eerst
    arsort($idarray);
    foreach ($idarray as $uitkomst2[1]=>$value){
        $bla = mysql_fetch_array(mysql_query("SELECT member as naam FROM $tabelnaam WHERE host LIKE '$uitkomst2[1]'"));
        if ($bla)
        {
        extract($bla);
        }
        else {
        $naam = $uitkomst2[1];
             }
    
    print "<TR><TD><center>$teller</center></TD><TD>$naam&nbsp</TD><TD><center>$value</center></TD></TR>";
    $teller++;
    $totaal=$totaal+$value;
                        }   
print "<TR><TD>&nbsp</TD><TD><b>Totaal:</b></TD><TD><b><center>$totaal</center></b></TD></TR>";
print "</TABLE>";
?>

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-08 07:26
Sorry als dit niet het antwoord is wat je zoekt, maar waarom zet je niet alle hosts ook in de database??

Twee tabellen
tabel1:
userid, username, host

tabel2:
hostid, userid, host

Dan kan je nl met dit vinden wat je zoekt.

PHP:
1
$query="Select * from tabel2 where userid='".$userid."'" ;

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je zou een nieuw array kunnen maken met de membername als key.

Ala:
PHP:
1
2
3
4
5
6
7
8
9
$membertotals = array();
foreach($idarray ...)
{
    ....
    if(!isset($membertotals[$naam]))
        $membertotals[$naam] = $value;
    else
        $membertotals[$naam] += $value;
}

Die je daarna pas compleet afdrukt.

Andere optie is de inhoud van je logfile de database in en met een query ala:
select member, count(values) as total from tabel group by member

oid