float-versie van levenshtein()
Voor diegene die levenshtein() niet kennen: http://nl.php.net/manual/en/function.levenshtein.php
Ik zag deze functie vanochtend ook pas voor het eerste.
Ik heb namelijk een functie nodig die het getal uit een array haalt die het dichtste bij het gemiddelde zit.
Dat kan met de functie average() (zonet gepost in Snippets).
Maar stel... ik heb dit:
Online voorbeeld op http://www.zunflappie.nl/temp/average.php
Maar hoe moet ik die nieuwe_functie() invullen?
Uiteraard krijgen ze beide getallen mee... zodat je ook kan zoeken naar welk getal het dichtste bij $getal ligt.
Die Levenshtein() doet zoiets met strings, maar is er zoiets ook voor getallen (floats!)?
Met range() kan je wel iets bereiken, maar daarmee is het einde zoek.
Arrays gaan opstellen met mogelijke antwoorden is onbegonnen werk (zeker bij een getal als in het voorbeeld (6.19xxxxxxxxxxxx)).
Ik zag deze functie vanochtend ook pas voor het eerste.
Ik heb namelijk een functie nodig die het getal uit een array haalt die het dichtste bij het gemiddelde zit.
Dat kan met de functie average() (zonet gepost in Snippets).
Maar stel... ik heb dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$array = array(6, 4, 8, 3, 4, 3.5, 9.25, 10, 8);
$gemiddelde = average($array); // geeft 6.19444444444
$getal = $gemiddelde; // of een ander getal, vandaar deze regel!
$getal_dichtst_bij = nieuwe_functie($getal, $array); // zou key1=6 moeten geven
?>
$array = array(6, 4, 8, 3, 4, 3.5, 9.25, 10, 8);
$gemiddelde = average($array); // geeft 6.19444444444
$getal = $gemiddelde; // of een ander getal, vandaar deze regel!
$getal_dichtst_bij = nieuwe_functie($getal, $array); // zou key1=6 moeten geven
?>
Online voorbeeld op http://www.zunflappie.nl/temp/average.php
Maar hoe moet ik die nieuwe_functie() invullen?
Uiteraard krijgen ze beide getallen mee... zodat je ook kan zoeken naar welk getal het dichtste bij $getal ligt.
Die Levenshtein() doet zoiets met strings, maar is er zoiets ook voor getallen (floats!)?
Met range() kan je wel iets bereiken, maar daarmee is het einde zoek.
Arrays gaan opstellen met mogelijke antwoorden is onbegonnen werk (zeker bij een getal als in het voorbeeld (6.19xxxxxxxxxxxx)).
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
Gesponsorde koppelingen:
Je moet ze dan wel goed gebruiken. Arrays moeten echte arrays zijn, niet met een key offset. De waarden moeten echte getallen zijn.
Code (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
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
<?php
$array = array(6, 4, 8, 3, 4, 3.5, 9.25, 10, 8);
$gemiddelde = array_average($array); // geeft 6.19444444444
$getal = $gemiddelde; // of een ander getal, vandaar deze regel!
$getal_dichtst_bij = nieuwe_functie($getal, $array); // zou key1=6 moeten geven
echo 'gemiddelde: '. $gemiddelde .
'<br/>dichtst bij: '. $getal_dichtst_bij;
function nieuwe_functie($gemiddelde, $getallen)
{
$beste_verschil = -1;
$index = -1;
$i = 0;
foreach ($getallen as $getal)
{
$verschil = abs($getal - $gemiddelde);
if ($verschil == 0)
return $getal;
if ($beste_verschil == -1 || $beste_verschil > $verschil)
{
$beste_verschil = $verschil;
$index = $i;
}
$i++;
}
return $getallen[$index];
}
function array_average($arr)
{
$sum = array_sum($arr);
$num = sizeof($arr);
return $sum/$num;
}
?>
$array = array(6, 4, 8, 3, 4, 3.5, 9.25, 10, 8);
$gemiddelde = array_average($array); // geeft 6.19444444444
$getal = $gemiddelde; // of een ander getal, vandaar deze regel!
$getal_dichtst_bij = nieuwe_functie($getal, $array); // zou key1=6 moeten geven
echo 'gemiddelde: '. $gemiddelde .
'<br/>dichtst bij: '. $getal_dichtst_bij;
function nieuwe_functie($gemiddelde, $getallen)
{
$beste_verschil = -1;
$index = -1;
$i = 0;
foreach ($getallen as $getal)
{
$verschil = abs($getal - $gemiddelde);
if ($verschil == 0)
return $getal;
if ($beste_verschil == -1 || $beste_verschil > $verschil)
{
$beste_verschil = $verschil;
$index = $i;
}
$i++;
}
return $getallen[$index];
}
function array_average($arr)
{
$sum = array_sum($arr);
$num = sizeof($arr);
return $sum/$num;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
@Emmanuel
Waarom gebruik je dan niet foreach met $key => $value, dat is betrouwbaarder dan zoals jij het doet, en het maakt op zich dan niet uit hoe de keys in elkaar steken.
Waarom gebruik je dan niet foreach met $key => $value, dat is betrouwbaarder dan zoals jij het doet, en het maakt op zich dan niet uit hoe de keys in elkaar steken.
Kan ook, ja.
Ik heb script online staan, in combinatie met average().
Zie http://www.zunflappie.nl/temp/getal_uit_array_nabij_getal.php
Daar heb ik het een getal opgeven om te zoeken. Dat getal zie je ook onderaan in de zin opgegeven.
Maar hij komt dus op een verkeerd getal uit.
De reden hiervoor? Geen idee, maar om eerlijk te zijn snap ik de logica van het script (zoals hierboven) ook niet.
Tevens heb ik nog niet echt een toepasselijke naam voor de functie gevonden. Iemand een betere (en vooral kortere) omschrijving?
@ Robert Deiman, hoe zou jij het dan?
Zie http://www.zunflappie.nl/temp/getal_uit_array_nabij_getal.php
Daar heb ik het een getal opgeven om te zoeken. Dat getal zie je ook onderaan in de zin opgegeven.
Maar hij komt dus op een verkeerd getal uit.
De reden hiervoor? Geen idee, maar om eerlijk te zijn snap ik de logica van het script (zoals hierboven) ook niet.
Tevens heb ik nog niet echt een toepasselijke naam voor de functie gevonden. Iemand een betere (en vooral kortere) omschrijving?
@ Robert Deiman, hoe zou jij het dan?
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
Ik heb een andere functie dan average. Bij jou (hier: http://www.zunflappie.nl/temp/getal_uit_array_nabij_getal.php) is die average een array, bij mij is dat 1 getal, namelijk het gemiddelde.
Probeer eens met mijn average functie, want ik weet niet wat die van jou doet.
Zie dan nog eens wat er gebeurt.
Als je wil weten wat er bij mij gebeurt:
-Je berekent het gemiddelde. Dat is 1 getal.
-Je doorloopt een foreach lus, voor elk element van de array.
*Bij elk element bekijk je het verschil met het gemiddelde.
*je houdt bij bij welk element dat verschil minimaal is.
*dat element geef je weer.
aan nieuwe_functie() geef je het getal mee dat je wil zoeken. In mijn geval is dat dus die average. Indien je iets anders wil, moet je dat getal maar mee geven en heb je die average niet meer nodig.
Probeer eens met mijn average functie, want ik weet niet wat die van jou doet.
Zie dan nog eens wat er gebeurt.
Als je wil weten wat er bij mij gebeurt:
-Je berekent het gemiddelde. Dat is 1 getal.
-Je doorloopt een foreach lus, voor elk element van de array.
*Bij elk element bekijk je het verschil met het gemiddelde.
*je houdt bij bij welk element dat verschil minimaal is.
*dat element geef je weer.
aan nieuwe_functie() geef je het getal mee dat je wil zoeken. In mijn geval is dat dus die average. Indien je iets anders wil, moet je dat getal maar mee geven en heb je die average niet meer nodig.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay



