[PHP] array-vergelijkingen

Pagina: 1
Acties:

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Ag wat stom, topic niet compleet ingevuld... |:(
Topic: PHP array-vergelijkingen

code:
1
2
3
4
5
$fc[0] = 192.168.0.2,1
$fc[1] = 192.168.0.2,2
$fc[2] = 192.168.0.7,6
$fc[3] = 192.168.0.1,7
$fc[4] = 192.168.0.2,3

Ik wil dus dat dan $fc[0], $fc[1] en $fc[4] bij elkaar opgeteld worden (de laatste variabele na de , dus resp 1,2 en 3) en in een andere variabele worden gepropt (bijv $bla[0]) .. Dus dat $bla[0] = 192.168.0.2,6 .... Maar hoe??

Ik heb dit al gedaan:
PHP:
1
2
3
4
5
<?
for ($i = 0; $i < count($fc); $i++) {
  $fc[$i] = explode (',', $fc[$i]);
}
?>

, dus dan heb ik de variabelen $fd[0][0] t/m $fd[4][2], maar hoe ga ik dan verder?
Deze actie is niet zinloos, omdat het 'echt' de variabelen $fd[0][0] tot en met $fd[1477][20] heeft...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

titel iets bijgewerkt :)

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Op vrijdag 26 oktober 2001 18:55 schreef ACM het volgende:
titel iets bijgewerkt :)
Dank je *D

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
Ik snap geen ruk van wat je nou eigenlijk wilt.
1e gedeelte is duidelijk, maar dan begin je vaag te blaten.

Wees eens duidelijk.

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Ik dacht dat ik met het gequote stuk al een deel van de oplossing had gevonden.. Maar ik weet niet wat ik er mee verder moet :P

De vraagt blijft nogsteeds, hoe maak ik van verschillende variabelen 1 variabele door er een stukje uit op te tellen? (Zie begin-post).
Op vrijdag 26 oktober 2001 18:53 schreef elviver het volgende:
*KNIP*
Ik heb dit al gedaan:
PHP:
1
2
3
4
5
<?
for ($i = 0; $i < count($fc); $i++) {
  $fc[$i] = explode (',', $fc[$i]);
}
?>

, dus dan heb ik de variabelen $fd[0][0] t/m $fd[4][2], maar hoe ga ik dan verder?
Deze actie is niet zinloos, omdat het 'echt' de variabelen $fd[0][0] tot en met $fd[1477][20] heeft...

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
|:(

WAT wil je nou in godsnaam bij elkaar tellen :?
Want dat 1e stuk van je en het 2e stuk hebben NIKS met elkaar te maken, eerst lul je over dingen achter een komma, en dan opeens over geneste array's (daar is een naam voor maar ben ik ff kwijt).

  • Markuzi
  • Registratie: November 2000
  • Laatst online: 25-02-2025
PHP:
1
2
3
4
5
6
7
<?
for ($i = 0; $i < count($fc); $i++) {  
  $parts = explode (',', $fc[$i]);
  $part1[$i] = $parts[0];
  $part2[$i] = $parts[1];
}
?>

De array part2 bevat nu de cijfers achter de komma en de array part1 de string ervoor...
Nu is het een kwestie van optellen en samenvoegen.

Als dit is wat je wilt tenminste... :?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Okay, op nieuw dan... :)
code:
1
2
3
4
5
$fc[0] = 192.168.0.2,1
$fc[1] = 192.168.0.2,2
$fc[2] = 192.168.0.7,6
$fc[3] = 192.168.0.1,7
$fc[4] = 192.168.0.2,3

In dat rijtje van 5 staan er 3 met hetzelfde IP. Achter dat IP staat een getal. Ik wil dat er van die 3 variabelen met hetzelfde IP 1 variabele gemaakt wordt, maar dan wel met het opgetelde getal erachter. Dus de totale output zou dan zijn:
code:
1
2
3
$fc[0] = 192.168.0.2,6
$fc[1] = 192.168.0.7,6
$fc[2] = 192.168.0.1,7

Dát wil ik :)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
Goedzo, nu is het tenminste duidelijk.
* Dennis gaat denken

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Op vrijdag 26 oktober 2001 19:52 schreef Markuzi het volgende:
PHP:
1
2
3
4
5
6
7
<?
for ($i = 0; $i < count($fc); $i++) {  
  $parts = explode (',', $fc[$i]);
  $part1[$i] = $parts[0];
  $part2[$i] = $parts[1];
}
?>

De array part2 bevat nu de cijfers achter de komma en de array part1 de string ervoor...
Nu is het een kwestie van optellen en samenvoegen.

Als dit is wat je wilt tenminste... :?
Da's een deel van wat ik wil... Alleen is dit maar een heel klein voorbeeld. Het gaat om 1400+ waarden in het begin, met elke waarde 23 velden erin, dus van $part[0][0] tot en met $part[1400][23]. Maar hoe doe je dan dat optellen, en het totaal weer terugzetten in hetzij een variabele hetzij een array

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
Laat me ff denken. :7

Verwijderd

Als je het als string in een array gooit zoals nu, kun je het gewoon sorteren. 192.168.0.2,2 komt namelijk direct achter 192.168.0.2,1 in 'het alfabet'.
Vervolgens kun je met een loopje en substr() telkens het begin van de string vergelijken, en alles na de komma optellen.
Alle 192.168.0.2,* staat dan allemaal op volgorde achter elkaar, dus hoef je niet telkens de hele array te gaan bekijken.

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
Op vrijdag 26 oktober 2001 20:00 schreef Cheatah het volgende:
Als je het als string in een array gooit zoals nu, kun je het gewoon sorteren. 192.168.0.2,2 komt namelijk direct achter 192.168.0.2,1 in 'het alfabet'.
Vervolgens kun je met een loopje en substr() telkens het begin van de string vergelijken, en alles na de komma optellen.
Alle 192.168.0.2,* staat dan allemaal op volgorde achter elkaar, dus hoef je niet telkens de hele array te gaan bekijken.
Hou ff je mond jij hè :P ;)
Ik ben al bezig voor die jongen :7 8-)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:34
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
for ($i = 0; $i < count($fc); $i++)
{
  $curr_array = $fc[$i];
  for ($j = 0; $j < count($curr_array); $j++)
  {
    $parts = explode (',', $curr_array[$j]);
    $ip_addr = $parts[0];
    $total = $parts[1];
    if(isset($result[$ip_addr])
      $result[$ip_addr] = $result[$ip_addr] + $total;
    else
      $result[$ip_addr] = $total;
  }
}
while(list ($key, $val) = each ($result))
{
  $ordered_array[] = $key.",".$val;
}
?>

en dan is je input dus:
code:
1
2
3
4
5
6
7
8
$bla[0][0] = ipadrress,1
$bla[0][1] = ipadrress,1
$bla[0][2] = ipadrress,1
$bla[0][3] = ipadrress,1
$bla[1][0] = ipadrress,1
$bla[1][1] = ipadrress,1
$bla[1][2] = ipadrress,1
$bla[1][3] = ipadrress,1

Enzovoort :)
Klopt toch :?
Zou het echt zo simpel zijn of vergeet ik iets :?

[edit]
Hmmmm, misschien het terugzetten naar een getallenarray... maar dan moet ik ook ff een indexje aanmaken :)

[edit2]
wacht nog ff met commentaar geven...

[edit3]
done :?

[edit4]
nee sukkel |:(
wel een array van maken |:(

Verwijderd

dennisdotcom: [php]
Waarom zo lang? :?

Perl (met PHP kan hetzelfde idee):
code:
1
2
3
4
5
my %total = ();
foreach (@fc) {
    my ($ip, $nr) = split /,/;
    $total{$ip} += $nr;
}

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 21:43
Omdat ik van dat perl afwil :P Vraag me niet waarom, dat wordt wel duidelijk ooit 8-)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op zondag 28 oktober 2001 02:56 schreef Arien het volgende:

[..]

Waarom zo lang? :?

Perl (met PHP kan hetzelfde idee):
code:
1
2
3
4
5
my %total = ();
foreach (@fc) {
    my ($ip, $nr) = split /,/;
    $total{$ip} += $nr;
}
Goed punt.
PHP vertaling:
PHP:
1
2
3
4
5
6
7
8
<?
$total = array ();
foreach ( $fc as $str ) 
{
    list ( $ip, $nr ) = explode ( ",", $str );
    $total [ $ip ] += $nr;
}
?>

dennisdotcom >
Multidimensionale arrays heette dat ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1