Toon posts:

[PHP] getal die het dichts in de buurt is

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Een variable heeft steeds een ander getal. Ik wil dat die variable een getal kiest uit een array die het dichtst daarbij in de buurt komt. Het getal in de array moet wel groter zijn als die van de variable.

Is hier ook een handige functie voor? Of moet ik gaan goochelen met procenten enz.?

  • Dryw.Filtiarn
  • Registratie: September 2001
  • Laatst online: 18-03 12:10
Ehmzzz...

1) wat heb je zelf al geprobeerd?
2) laat eens wat code zien
3) de meest belangrijke... OMSCHRIJF EVEN DUIDELIJK WAT JE WILT...

[sorrymode]Ik mag niet schreeuwen tegen je[/sorrymode]

Maaruh al iets met ceil en floor geprobeerd?

=( Protected by witchcraft )=


Verwijderd

Topicstarter
De bedoeling is dat ik een beetje logische nummering heb voor een grafiek.

Bijv. als de hoogste value 80 is. Dat de nummering tot bijv. maximaal 100 gaat.

Verwijderd

ik zou het zelf zo aanpakken:

dus die variabele in die array gooien dan er naar zoeken kijken wat er rechts en links er van zit en dat vergelijken...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$cijfertjes = array( 1, 2, 3, 4, 5 );
$variabele = 3;
array_push( $cijfertjes, $variabele );
sort( $cijfertjes );
$key = array_search( $variabele, $cijfertjes );
$left = abs( $cijfertjes[ $key - 1 ] - $variabele );
$right = abs( $cijfertjes[ $key + 1 ] - $variabele );

if ( $left < $right )
        echo "Afwijking is links het kleinst: " . $left;
elseif ( $left > $right )
        echo "Afwijking is rechts het kleinst: " . $right;
else
        echo "Afwijking is gelijk aan beide kanten: " . $left;
?>


edit:

nee er is niet direct een functie daarvoor maar die is makkelijk te maken zoals je hierboven al ziet

  • Dryw.Filtiarn
  • Registratie: September 2001
  • Laatst online: 18-03 12:10
dit was crap!

=( Protected by witchcraft )=


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik zou zeggen: array sorteren en dan doorlopen totdat je bij een element komt dat groter is. dan uit dat element en het vorige de dichtstbijzijnde kiezen.

edit 1: dit is bijna hetzelfde als de code van Caesium :)

edit 2:
Het getal in de array moet wel groter zijn als die van de variable.
oh, in dat geval hoef je niet naar het vorige element te kijken.

Verwijderd

Topicstarter
Ik heb die van Dryw.Filtiarn even aangepasd en heb nu een werkende versie:
PHP:
1
2
3
4
5
6
7
8
9
10
$maxvalue = array("10","20","50","100","150");

$value = 36;
foreach( $maxvalue as $waarde ) {
    if( $waarde > $value) {
        $newvalue = $waarde;
        break;
    }
}
echo $newvalue; //krijg hier 50


Probleem is opgelosd.

/edit
En ja Dryw.Filtiarn...ik had ut zelf ook kunnen bedenken, maar dat doe ik op dit moment wel beter dan jou.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
Als die 'punten in de buurt' niet nauwkeurig gespecificeerd hoeven te kunnen in een array, kan je het ook berekenen.
(intval(maxvalue / 20) +1) * 20
Met bovenstaande formule wordt er afgerond op 20-tallen.
79->80
80->100
81->100
.
.
99->100
100->120
Of het gedrag dat 100 naar 120 wordt afgerond wenselijk is weet ik niet, maar daar is ook wel een mouw aan te passen.

Verwijderd

a) als je array niet gesorteerd is dan kan je er ook niet zeker van zijn dat je de dichtsbij zijnde waarde hebt
b) als je bijv in deze situatie zit array(10,20,50,59,100) en je $value = 53 dan pakt die waarde 59 ipv waarde 50...

Verwijderd

wees duidelijk met wat je wil...
wij kunnen niet ruiken wat je daad werkelijk wil...

een reactie als iemand je helpt en jij kraakt het vervolgens af wordt hier dus niet getolereerd....

Verwijderd

Topicstarter
Verwijderd schreef op 29 oktober 2002 @ 23:55:
a) als je array niet gesorteerd is dan kan je er ook niet zeker van zijn dat je de dichtsbij zijnde waarde hebt
b) als je bijv in deze situatie zit array(10,20,50,59,100) en je $value = 53 dan pakt die waarde 59 ipv waarde 50...
Klopt, maar ik stel die waardes zelf in, dus dat is geen probleem.
Verwijderd schreef op 29 oktober 2002 @ 23:56:
wees duidelijk met wat je wil...
wij kunnen niet ruiken wat je daad werkelijk wil...

een reactie als iemand je helpt en jij kraakt het vervolgens af wordt hier dus niet getolereerd....
Nou, het probleem is dat hij mij eerst afkraakt, maar dat heeft ie later verwijderd omdat hij 'crap' poste. FF een citaat wat hij achter een foute code zei:
"Dit had je zelf ook wel kunnen bedenken! Of niet?", dit kwam bij mij dus niet lekker over.
Sjaaky schreef op 29 oktober 2002 @ 23:51:
Als die 'punten in de buurt' niet nauwkeurig gespecificeerd hoeven te kunnen in een array, kan je het ook berekenen.
(intval(maxvalue / 20) +1) * 20
Met bovenstaande formule wordt er afgerond op 20-tallen.
79->80
80->100
81->100
.
.
99->100
100->120
Of het gedrag dat 100 naar 120 wordt afgerond wenselijk is weet ik niet, maar daar is ook wel een mouw aan te passen.
Dit werkt nog beter, dan hoef ik tenminste niet van die array's te maken. Thx.

/edit
Ik ga nu ff pitte, dus ik lees de reacties morgenochtend wel.

  • R_W
  • Registratie: Oktober 2002
  • Niet online

R_W

Sjaaky schreef op 29 oktober 2002 @ 23:51:
Als die 'punten in de buurt' niet nauwkeurig gespecificeerd hoeven te kunnen in een array, kan je het ook berekenen.
(intval(maxvalue / 20) +1) * 20
Met bovenstaande formule wordt er afgerond op 20-tallen.
79->80
80->100
81->100
.
.
99->100
100->120
Of het gedrag dat 100 naar 120 wordt afgerond wenselijk is weet ik niet, maar daar is ook wel een mouw aan te passen.
Dit gaat denk ik makkelijker met ceil():
PHP:
1
$waarde = ceil($waarde/20)*20;

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
R_W schreef op 30 oktober 2002 @ 14:34:
Dit gaat denk ik makkelijker met ceil():
PHP:
1
$waarde = ceil($waarde/20)*20;
let er wel op dat 100 dan 100 geeft en niet 120

Pas de replâtrage, la structure est pourrie.

Pagina: 1