PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 01-09-2010 20:32:25

Yannick
Membre
Inscription : 22-09-2009
Messages : 42

Compter le nombre d'éléments d'un tableau qui sont plus petit que...

Bonsoir à tous,
J'ai une demande à vous faire: je dois comparer les valeurs d'un tableau et je ne sais pas trop comment prendre le problème que voici.

J'ai d'un côté un tableau qui contient (p.ex.) 5 chiffres => 10, 20, 40 ,80, 100
J'ai de l'autre un tableau qui contient (p.ex.) 3 chiffres => 5, 50, 90

J'aimerais connaître le nombre d'éléments du premier tableau qui sont plus petits que 5, entre 5 et 50, entre 50 et 90.

En gros j'aimerais comparer les valeurs de deux tableaux avec un opérateur mathématique, le tout en me déplaçant entre deux valeurs qui font office de limite.

J'ai essayé de composer un fonction maison sur la proposition du manuel PHP, à savoir ceci :

$array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
    if ($fruit_name == 'apple') {
        echo key($array).'<br />';
    }
    next($array);
}

, mais je dois faire fausse route.
Cela fait plusieurs jours que je tourne le problème dans ma caboche, mais je ne vois tjrs pas quelle démarche entamer.
Vos lumières sont les bienvenues!

Merci et belle soirée à tous.

Hors ligne

#2 01-09-2010 21:17:14

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Compter le nombre d'éléments d'un tableau qui sont plus petit que...

Bonjour,

Voici la solution que je te propose:

1) tu fais une boucle principale avec ton 2e tableau (celui qui dans ton exemple contient 5,50,90)
2) tu crée un tableau dynamique à deux dimensions ici ($my_array) qui stocke pour chaque intervalle (1e dimension) l'ensemble des valeurs associés dans la 2e dimension


$c=array_count($tab1);$c2=array_count($tab2);$my_array=array();$j=0;
  for($i=0;$i<$c2;$i++){ // Boucle sur tes intervalles
        if ($i==0){
           for($j=0;$j<$c;$j++){
               if($tab1[$j]>=0 && $tab1[$j]<$tab2[$i]){$my_array[$i,$j]=$tab1[$j];}
           }
        }else{
           for($j=0;$j<$c;$j++){
               if($tab1[$j]>=$tab2[$i-1] && $tab1[$j]<$tab2[$i]){$my_array[$i,$j]=$tab1[$j];}
           }
       }
  }

 

Normalement ca devrait marcher à partir du moment où le tableau de tes intervalles représente une suite de nombres croissants et positifs.

Dernière modification par Jc (01-09-2010 21:24:58)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 01-09-2010 22:23:53

Yannick
Membre
Inscription : 22-09-2009
Messages : 42

Re : Compter le nombre d'éléments d'un tableau qui sont plus petit que...

Merci pour le coup de pouce.
J'ai bossé encore un peu le truc et je crois avoir trouvé une solution correcte :



[code php]$tab1 = array(9,10, 14, 17, 40, 200, 240, 300, 340, 600);
$tab2 = array(1, 11, 12, 230, 240, 450);

$sum = 1;
$j = 0;       
$k = 0;

        foreach ($tab1 as $key1) {
           
            foreach ($tab2 as $key2) {
               
                print $key1 . ' > ' .$tab2[$j++]  ;
               
                if ( $key1 > $tab2[$k++] ) {
                   
                    $sum_array = array($sum++);
                    print ' TRUE';
                }
               
                print '<br/><br/>';
               
            }
            print 'Number of added true: ' . max($sum_array) .'<br/><br/>';
           
            $sum_array = array();
            $j = 0;
            $k = 0;

        }[/code]
Ce qui donne :

[code]9 > 1 TRUE

9 > 11

9 > 12

9 > 230

9 > 240

9 > 450

Number of added true: 1

10 > 1 TRUE

10 > 11

10 > 12

10 > 230

10 > 240

10 > 450

Number of added true: 2

14 > 1 TRUE

14 > 11 TRUE

14 > 12 TRUE

14 > 230

14 > 240

14 > 450

Number of added true: 5[/code]
...... etc. Bien sûr je n'ai pas ici l'intervalle, mais ce serait très facile de l'ajouter comme ceci au début de la 2ème boucle foreach:


[code php]
$key1 > $tab2[$j++]  && $key1 < $tab2[$j];
[/code]

Merci!

Dernière modification par Yannick (01-09-2010 22:29:50)

Hors ligne

Pied de page des forums