[PHP] multidimensional arrays

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik ben bezig met een script dat letters moet matchen van twee woorden (namen), de woorden worden uit een array ingelezen en ik wil graag de scores ook opslaan in een multdimensional array, echter ik stuit op enkele problemen waarvan ik de oorsprong niet kan traceren.. zo print hij bovoorbeeld eerst 11x een 0, waar komt deze vandaan?

code:
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
$boynames = array("tim","jorik","elmer","stefan","dario","thomas","olaf","diederik","hans","mark");
$girlnames = array("iris","sharon","marieke","rose","christel","maartje","janneke");
$boytotal = array();

$t=0;

foreach ($boynames as $boyname){
    
    $maxboy = strlen($boyname);

    for ($b=0;$b<$maxboy;$b++){ 

        $boynames[$boyname][$b] = substr($boyname,$b,1);
// hier split hij het woord op letters en zet ze een voor een in een 2d array
    }
}

foreach ($boynames as $boyname){
    

    foreach ($boyname as $letter) {

        echo $letter . "<br>";


        foreach ($result1 as $temp1){
// result1 is een array die in het ander deel van het programma wordt gemaakt   
        
            if (preg_match("/$temp1/i",$letter)) {

                echo "MATCH<br>";
                $sub_total++;
// het liefst zou ik hier $boytotal[$boyname]++ neerzetten maar werkt niet ..
        
            }
            
        }
    
    
    }




    echo @$sub_total;
    $boytotal[$t]= $sub_total;
    $t++;
    $sub_total = 0;
    echo "<br><br>";
    


}


voorbeeld output

0

0

0

0

0

0

0

0

0

0


t
i
m
0

j
MATCH
o
r
i
k
1

[ Voor 57% gewijzigd door Verwijderd op 05-11-2004 16:22 ]


Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 15-09 21:46
Wat is de preciese bedoeling van je script? Want als je wil weten hoeveel het gaat matchen, kun je beter de functie similar_text() of substr_compare() gebruiken.

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

Verwijderd

.. en dan heb je ook nog levenshtein

maar wat wil je idd met dat script?

en tussen [php] ipv [code] leest wat makkelijker..

en die 11x een 0 lijkt van
PHP:
1
echo @$sub_total;
te komen?
offtopic:
die @ is trouwens vies

[ Voor 79% gewijzigd door Verwijderd op 05-11-2004 16:41 ]


Acties:
  • 0 Henk 'm!

  • Spixo
  • Registratie: Augustus 2004
  • Nu online
Volgens mij wordt het zo'n maffe "love-calculator"

Acties:
  • 0 Henk 'm!

Verwijderd

hij print 10x een 0 vanwege de regel:
PHP:
1
echo @$sub_total;


zit tenslotte in die foreach die gaat itereren over $boynames
en aangezien deze sub_total niet geinitialiseerd is, geeft die standaard 0
je hebt daar helemaal geen array van gemaakt, terwijl dat net wel de bedoeling leek?

als ik jou was zou ik die code opnieuw schrijven, maar er eerst eens over nadenken, de implementatie lijkt me niet zo denderend ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Ricardo87 schreef op 05 november 2004 @ 16:39:
Volgens mij wordt het zo'n maffe "love-calculator"
vrees het ook :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
het wordt inderdaad zo'n lovecalculator :(, het gaat niet zozeer om het onderwerp maar om even bezig te zijn met php..

code:
1
2
3
<?
echo @$sub_total;
?>


hier zal het probleem niet inzitten aangezien ik die @ later ervoor heb geplaatst omdat $sub_total niet goed deed, ik had ergens iets gelezen dat @ervoor wel een wilde helpen..
Ik heb $sub_total inderdaad niet op 0 gedefinieerd misschien dat daar het probleem wel zit, ga even kijken

code is inderdaad niet netjes en nog chaotisch, maar ik ben een gestroomlijnde versie aan het aanpassen, daarom zit dit er nog zo chaotisch uit, als het redelijk functioneert ga ik alles verschonen.

Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 15-09 21:46
Kun je hier niets mee?
PHP:
1
2
3
4
5
6
7
8
9
<?php

function countLove($boy, $girl) {
    similar_text(strtolower($boy), strtolower($girl), $output);
    return round($output, 2);
}

echo 'Er matcht '.countLove('Piet Paulusma', 'Jan Klaasen').'% tussen Piet Paulusma en Jan Klaasen';
?>

Het is waarschijnlijk nog niet helemaal geschikt, omdat er wellicht wat lage percentages uitkomen, misschien kun je daar nog wat mee spelen.

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zit wellicht hier het probleem:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
foreach ($boynames as $boyname){
//naam van de jongen    

    foreach ($boyname as $letter) {
//naam van de jongen gesplit in letters
        echo $letter . "<br>";


        foreach ($result1 as $temp1){
//letters van het woord waar tegen gematched wordt  
        
            if (preg_match("/$temp1/i",$letter)) {

                echo "MATCH<br>";
                $boy_total[$boyname]++;
        
            }
            
        }
    
    
    }
}


kan die

code:
1
$boy_total[$boyname]++;


wel aanmaken? heb hem wel eerste gedefinieerd als $boy_total = array();
het matchen en zo gaat prima, hij telt goed,
het zit hem dus alleen in het opslaan van de matchresultaten ...

[ Voor 6% gewijzigd door Verwijderd op 05-11-2004 20:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik zal nogmaals een output voorbeeld geven:

door de volgende code:

waarom print hij nu eerst netjes de namen, en daarna "ARRAY total: 2"
code:
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
foreach ($boynames as $boyname){
    
    

    foreach ($boyname as $letter) {

        echo $letter . "<br>";


        foreach ($result1 as $temp1){
    
        
            if (preg_match("/$temp1/i",$letter)) {

                echo "MATCH<br>";
                $sub_total++;
                
        
            }
            
        }
    
    
    }

echo $boyname . " total: " . $sub_total;

echo "<br><br>";
$sub_total = 0;
}


komt dit:

code:
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
tim total: 0

jorik total: 0

elmer total: 0

stefan total: 0

dario total: 0

thomas total: 0

olaf total: 0

diederik total: 0

hans total: 0

mark total: 0

t
MATCH
i
MATCH
m
Array total: 2

j
o
r
i
MATCH
k
Array total: 1

e
MATCH
l
m
e
MATCH
r
Array total: 2
Pagina: 1