Versio

Vraag waardenvergelijking (near)

Overzicht Reageren

Twan van der Poel

Twan van der Poel

29/11/2008 14:36:00
Quote Anchor link
Dag PHP'ers,

ik wil een graag van een getal de dichtsbijzijnde waarde krijgen.
Stel er staan in een tabel de getallen 8, 20, 40 en 100.
En ik zoek b.v. op 80, dan wil ik 100 terugkrijgen.
Zoek ik op 22, dan wil ik 20 terugkrijgen.
Ik las iets van SQL syntax NEAR.

Of kan dit met een PHP handigheidje geraliseerd worden ?

Groet,

Twan
 
PHP hulp

PHP hulp

25/05/2012 18:49:32
Gesponsorde koppelingen:
 
Jelmer rrrr

Jelmer rrrr

29/11/2008 14:40:00
Quote Anchor link
Wat je zou kunnen doen is met array_map van iedere waarde het verschil met de gezochte waarde uitrekenen. Vervolgens zou je met een eigen implementatie van min de key met de laagste waarde op kunnen zoeken, en de waarde die bij die key hoorde in de originele array kunnen pakken.
 
Bo az

Bo az

29/11/2008 15:21:00
Quote Anchor link
Quote:
Ik las iets van SQL syntax NEAR.

Vermoedelijk gebruik je mysql en daar kan ik niets met zekerheid over zeggen, maar in SQL Server heeft near met full text search te maken. Dat zou je er dus niet voor kunnen gebruiken.
 
Twan van der Poel

Twan van der Poel

29/11/2008 15:26:00
Quote Anchor link
Dag Jelmer,

hartelijk dank voor jouw reactie!
Ik heb nu de volgende code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
define("GETAL",$_GET['getal']);
$getallen = array(1,10,20,30,50,100);

printf('<br />We zoeken getal %d.<br />',GETAL);
echo 'De getallen waarin we willen zoeken zijn<br />';
echo '<pre>';
print_r($getallen);
echo '</pre>';

$verschillen = array_map("haalVerschil",$getallen);

echo '<br />Nadat we alle verschillen hebben berekent:';
echo '<pre>';
print_r($verschillen);
echo '</pre>';

sort($verschillen);

printf('<br />Dichtsbijzijnde waarde is %d',min($verschillen));

function
haalVerschil($a) {
    return GETAL - $a;
}

?>


Het moment dat sort() wordt gebruikt wil ik eigenlijk de waarde het dichtstbij 0 achterhalen. Dat is het getal wat ik nodig heb.
Heb jij of iemand anders nog suggesties?

Groet,

Twan
 
Eddy Erkelens

Eddy Erkelens

29/11/2008 15:40:00
Quote Anchor link
in de functie haalVerschil nog even een abs() erover?
En dan moet de rest wel werken inderdaad.
 
Jelmer rrrr

Jelmer rrrr

29/11/2008 15:47:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

$getallen
= array(8, 20, 40, 100);

function
nearest_neighbour($gezochte_getal, $getallen) {
    $aantal_getallen = count($getallen);
    
    $callback = create_function('$x', sprintf('return abs($x - %d);', $gezochte_getal));
    
    $afstanden = array_map($callback, $getallen);
    
    $minimum_afstand_index = 0;
    
    for($i = 1; $i < $aantal_getallen; $i++) {
        if($afstanden[$i] < $afstanden[$minimum_afstand_index]) {
            $minimum_afstand_index = $i;
        }
    }

    
    return $getallen[$minimum_afstand_index];
}


echo nearest_neighbour(31, $getallen);
?>


Echt jammer dat PHP nog geen echte closures heeft... nu moest ik het oplossen met het ranzige create_function wil ik het allemaal binnen 1 functie houden.
 
Twan van der Poel

Twan van der Poel

29/11/2008 16:22:00
Quote Anchor link
Jelmer,

harstikke bedankt. Werkt geweldig en na e.e.a. aan onderzoek snap ik ook wat je gepost hebt.

Nogmaals bedankt,

Groet,

Twan
 



Overzicht Reageren

Get Adobe Flash player