Sélectionner un chiffre entre 2 bornes

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Sélectionner un chiffre entre 2 bornes

Message le Mar Juin 10, 2008 15:17

Salut,

J'essaie de sélectionner un chiffre qui soit compris entre 2 bornes d'un tableau array mais j'ai quelques soucis, voici mon code :

Code: Tout sélectionner
$mon_chiffre_test = "125";
$headers=array('0','1','5','10','20','50','100','200','300','400');
for($ib=0;$ib<sizeof($headers);$ib++){
if($headers[$ib]<=$mon_chiffre_test){echo "<b>".$headers[$ib]."</b>";}
else{echo "".$headers[$ib]."<br>";}
}


Ca m'affiche ça :

0
1
5
10
20
50
100

200
300
400

Comment faire pour obtenir le chiffre 200 qui est inférieur à 125 ?


e-kiwi
Modérateur
Modérateur
 
Messages: 15618
Inscription: 23 Déc 2003

Message le Mar Juin 10, 2008 15:24

>> le chiffre 200 qui est inférieur à 125

pardon ?


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3602
Inscription: 10 Fév 2004

Message le Mar Juin 10, 2008 15:41

ya une fonction php de choix aléatoire il me semble
un truc style array_rand


2dm
WRInaute discret
WRInaute discret
 
Messages: 205
Inscription: 3 Sep 2002

Message le Mar Juin 10, 2008 15:41

Effectivement c'est pas très clair :D

Tu veux l'indice (ou la valeur) du plus grand nombre inférieur à ta valeur de test ?

chtipepere
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 496
Inscription: 8 Jan 2004

Message le Mar Juin 10, 2008 15:43

Je m'auto-censure...
Ca peut peut-être t'aider ça :

Code: Tout sélectionner
<?php
$mon_chiffre_test = 125; // le chiffre à tester
$headers = array(0, 1, 5, 10, 20, 50, 100, 200, 300, 400); // les tableau des "bornes"
for($i=0; $i < sizeof($headers); $i++) // on parcours le tableau
{
   if($headers[$i] > $mon_chiffre_test)
   {
                // si la borne est plus que grande que le chiffre à tester
      $borne_haute = $headers[$i]; // on récupère la borne actuelle, celle qui est suprérieur
      $borne_basse = $headers[$i-1]; // on récupère la borne inférieure
      echo $mon_chiffre_test.' est compris entre '.$borne_basse.' et '.$borne_haute;
      break;
   }
   elseif($mon_chiffre_test > $headers[$i])
      echo $mon_chiffre_test.' est plus grand que '.$headers[$i].'<br />';
}
?>

Code exécuté :
125 est plus grand que 0
125 est plus grand que 1
125 est plus grand que 5
125 est plus grand que 10
125 est plus grand que 20
125 est plus grand que 50
125 est plus grand que 100
125 est compris entre 100 et 200

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Message le Mar Juin 10, 2008 16:01

Ok je n'ai pas été très clair :oops: , je cherche à obtenir le chiffre dans le tableau array qui ne dépasse pas la valeur de ma variable $mon_chiffre_test ?

Dans le cas ou $mon_chiffre_test = 125 on devrait donc retourner le chiffre 200 car 100 est < à 125 mais 200 est > à 125.

Avec Mysql il y a BETWEEN qui fait ça mais en php ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Mar Juin 10, 2008 16:05

T'es encore pas très clair

toto2525 a écrit: je cherche à obtenir le chiffre .. qui ne dépasse pas la valeur de ma variable $mon_chiffre_test ? (125 donc)


toto2525 a écrit:$mon_chiffre_test = 125 on devrait donc retourner le chiffre 200


Donc tu veux obtenir le premier chiffre qui dépasse $mon_chiffre_test = 125 ? Soit 200 !!! Bref fais un gros effort la, parceque tu as essayé d'en faire un mais c'est pas encore ça :mrgreen:


2dm
WRInaute discret
WRInaute discret
 
Messages: 205
Inscription: 3 Sep 2002

Message le Mar Juin 10, 2008 16:13

Apparemment ce qu'il veut c'est juste trouver l'intervalle dans lequel se trouve sa valeur de test.

Le code de chtipepere va t'aider, mais tu dois faire gaffe aux cas ou ta valeur de test est hors limite (plus petite/grande que ta borne inférieure/supérieure).

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Message le Mar Juin 10, 2008 16:25

Ouais désolé YoyoS mais j'ai un QI très limité :lol:

En fait si je reformule mon problème je pourrais dire : je cherche la valeur du tableau array (la borne haute) qui soit juste inférieure à $mon_chiffre_test

Je veux juste la borne haute et pas les autres, dans le cas de $mon_chiffre_test = 125 on aurait en théorie comme résulats les chiffres 200, 300 et 400 mais je veux juste obtenir le premier soit 200 dans ce cas là.


2dm
WRInaute discret
WRInaute discret
 
Messages: 205
Inscription: 3 Sep 2002

Message le Mar Juin 10, 2008 16:35

Nan mais si avec tes valeurs, tu veux que ça te retournes 200, tu dois définir ce que tu cherches par :

je veux la plus petite valeur de mon tableau qui soit supérieure ou égale à ma valeur de test


Chtipepere t'as donné une solution quasiment complète.

Enfin, pour trouver ça dans un tableau trié, ca casse quand même pas 3 pattes à un canard.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Mar Juin 10, 2008 16:41

Code: Tout sélectionner
unset($result);$mon_chiffre_test = 125;
$headers=array('0','1','5','10','20','50','100','200','300','400');
foreach ($headers as $val) if($val>$mon_chiffre_test && !$result) $result=$val;


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Mar Juin 10, 2008 17:43

Donc tu veux obtenir le plus petit domaine : [0;200[ dans lequel 125 se trouve ? :D

La solution de jeroen convient ?
Dernière édition par YoyoS le Mar Juin 10, 2008 17:46, édité 1 fois.


OTP
Modérateur
Modérateur
 
Messages: 19532
Inscription: 16 Déc 2005

Message le Mar Juin 10, 2008 17:46

e-kiwi a écrit:>> le chiffre 200 qui est inférieur à 125

pardon ?


Avec un Pentium de première génération, ça doit le faire...
Désolé...
:arrow:


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Mar Juin 10, 2008 18:24

Histoire de chipoter, la même solution que jeroen mais avec un break pour éviter les tests et itérations superflus :
Code: Tout sélectionner
$result = NULL;
$monChiffreTest = 125;
$headers = array( 0, 1, 5, 10, 20, 50, 100, 200, 300, 400 );

foreach ( $headers as $valeur )
    if( $valeur > $monChiffreTest ) {
        $result = $valeur;
        break;
        }

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Message le Mar Juin 10, 2008 21:01

Merci à jeroen pour sa solution qui marche parfaitement et merci aux autres pour leur participation, leur compréhension (à mon égard, je suis un peu neuneu) et pour leur humour, ça permet de moins se prendre la tête, même si je n'ai pas bien compris la réponse de darksword qui nous dit :

...ca casse quand même pas 3 pattes à un canard.


Comment y va faire le caneton pour marcher avec une seule patte :roll:

Vous aurez ben faire tourner sa seule patte en boucle (une belle boucle while) c'est pas gagné de le faire avancer droit le petit poulet (heu pardon le caneton)...

Merci à darksword qui a parfaitement formulé la question de mon problème :

Code: Tout sélectionner
je veux la plus petite valeur de mon tableau qui soit supérieure ou égale à ma valeur de test


Allez grosses bises à vous toutes mes petites cailles.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité