Hei,
Minulla on taulukko joka pitää sisällään tietoa seuraavanlaisesti:
IP : AIKA 212.3.3.3 : 1249 212.3.3.3 : 54 233.123.43.2 : 234 233.123.43.2 : 2135 .. .. .. ja niin edespäin.
Olen yrittänyt keksiä miten saan laskettua jokaisen IP osoitteen ajat yhteen. eli tässä tapauksessa 212.3.3.3:n aika olisi yhteensä 1303.
Voisitteko neuvoa miten tämä onnistuisi.
Kiitos!
Ellei PHP:sta siihen erikseen löydy funktiota (joo löytyy kaikkee kivaa) niin ainakin tämä kelpaa korvikkeeksi:
Et kertonut miten sinulla se taulukko siellä PHP:ssä on, mutta esimerkiksi näin onnistuu:
<?php $taulukko = array( array("212.3.3.3", 1249), array("212.3.3.3", 54), array("233.123.43.2", 234), array("233.123.43.2", 2135), ); $yht = array(); foreach ($taulukko as $alkio) { if (!isset($yht[$alkio[0]])) $yht[$alkio[0]] = 0; $yht[$alkio[0]] += $alkio[1]; }
Tuolla tavalla $yht
-taulukosta löytyy IP-avaimella yhteismäärä.
E: temu92 olikin nopeampi lähes identtisellä ratkaisulla.
tosiaan nämä haetaan siis shoutcastin logista. jokainen rivi jolla joku IP lopettaa kuuntelun niin tallennetaan riviltä IP osoite ja aika taulukkoon näin:
<?php foreach ($lines as $line_num => $line) { list($first, $second, $third, $con, $action, $sec) = split('[ ]', if ($second == "[dest:") { $third = substr_replace($third ,"",-1); if ($con == "connection" && $action == "closed") { $seconds = substr_replace($sec ,"",0,1); $listeners['IP'] = $third; $listeners['time'] = $seconds; } } } ?>
Hieman sekava taitaa olla, mutta toimii :D
Mutta mutta..
Kiitokset vastauksista.
Yritän kehitellä noista jotain :)
EDIT:
Noniin!
nyt ollaan astetta lähempänä totuutta.
<?php foreach ($lines as $line_num => $line) { list($first, $second, $IP, $con, $action, $sec) = split('[ ]', htmlspecialchars($line)); echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n"; if ($second == "[dest:") { $IP = substr_replace($IP ,"",-1); echo $IP."<br />\n"; if ($con == "connection" && $action == "closed") { $seconds = substr_replace($sec ,"",0,1); echo $seconds."<br />\n"; $lisä = array($IP,$second); array_push($listeners, $lisä); } } } $yht = array(); foreach ($listeners as $alkio) { if (!isset($yht[$alkio[0]])) $yht[$alkio[0]] = 0; $yht[$alkio[0]] += $alkio[1]; } print_r($yht); ?>
tulostuu hieno taulukko IP osoitteista, mutta jokaisella on 0 sekuntia aikaa.
Array ( [82.***.***.***] => 0 [91.***.***.*] => 0 ....
Osaisiko joku paikantaa vian.
Kiitos.
Äh .. unohtakaa .. pieni kirjoitus virhe vain..
Aihe on jo aika vanha, joten et voi enää vastata siihen.