Sélectionner un chiffre entre 2 bornes

toto2525

WRInaute occasionnel
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:
$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 ?
 

2dm

WRInaute discret
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
Je m'auto-censure...
Ca peut peut-être t'aider ça :

Code:
<?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
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
T'es encore pas très clair

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

toto2525 a dit:
$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
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
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
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é
Code:
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
Donc tu veux obtenir le plus petit domaine : [0;200[ dans lequel 125 se trouve ? :D

La solution de jeroen convient ?
 

Bool

WRInaute passionné
Histoire de chipoter, la même solution que jeroen mais avec un break pour éviter les tests et itérations superflus :
Code:
$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
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:
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.
 

Discussions similaires

Haut