un problème avec la fonction sort et foreach

krapoulos2011
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 12:50

Bonjour,

D'avance merci pour votre aide.
Je veux trier 2 tableaux diffèrents (le tableau valeur et le tableau chx).
Voilà mon petit bout de code.
<?
$valeur = array();
$valeur[0]=8.5;
$valeur[1]=3.5;
$valeur[2]=5;
$valeur[3]=2;

$chx[0]=4;
$chx[1]=2;
$chx[2]=1;
$chx[3]=3;

sort($valeur);

foreach ($valeur as $key => $val) 
{
	foreach ($chx as $key => $num) 
              {
              echo 'le chx '.$num.' a une  valeur de  '.$val.' <br/>';
	}
}
?>
Mon problème est que normalement le classement du tableau valeur avec les donnees du tableau chx doit être comme cela :

le chx 3 a une valeur de 2
le chx 2 a une valeur de 3.5
le chx 1 a une valeur de 5
le chx 4 a une valeur de 8.5

mais j'obtiens cela :shock: :shock:

le chx 4 a une valeur de 2
le chx 2 a une valeur de 2
le chx 1 a une valeur de 2
le chx 3 a une valeur de 2
le chx 4 a une valeur de 3.5
le chx 2 a une valeur de 3.5
le chx 1 a une valeur de 3.5
le chx 3 a une valeur de 3.5
le chx 4 a une valeur de 5
le chx 2 a une valeur de 5
le chx 1 a une valeur de 5
le chx 3 a une valeur de 5
le chx 4 a une valeur de 8.5
le chx 2 a une valeur de 8.5
le chx 1 a une valeur de 8.5
le chx 3 a une valeur de 8.5

Merci pour votre aide (precieuse).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2011, 12:58

C'est parce que tu as deux boucles imbriquées... la première parcours les 4 premiers éléments de ton tableau, et pour chaque élément, la seconde parcours les 4 éléments du 2nd tableau. Tu te retrouves donc avec 16 lignes au lieu de 4 :)

Si ton besoin est simplement de rapprocher les deux valeurs parce qu'elles ont le même index, tu n'as pas besoin d'une seconde boucle, il te suffit simplement d’interroger ton tableau en lui précisant l'index recherché :
foreach ($valeur as $key => $val) // pour chaque couple clé / valeur du tableau $valeur
{
    // on affiche la valeur associée à la clé dans le tableau $chx, et la valeur que l'on récupère dans le foreach
    echo 'le chx ' . $chx[$key] . ' a une  valeur de  ' . $val . ' <br/>';
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

krapoulos2011
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 14:04

Cela ne fonctionne pas

Je veux un classement dnas le tableau $valeur par ordre croissant.
Une fois trouvé la plus petite valeure (ici dans l'exemple $valeur[3] avec pour donnée 2). je l'associe au tableau chx (toujours dans l'exemple $chx[3] =3;
Ce qui nous donne

le choix 3 à une valeur de 2 et ainsi de suite
et une fois le tableau trié j'obtiens ...

$valeur[3]=2 -> $chx[3]=3
$valeur[1]=3.5 -> $chx[1]=2
$valeur[2]=5 -> $chx[2]=1
$valeur[0]=8.5 -> $chx[0]=4

Juste pour info je recois des données sur 2 tableaux et je veux associé les 2 valeurs pour une même clé avec un classement par odre croissant sur le tableau valeur.

Merci pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2011, 14:11

Et si tu tries avec asort() ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

krapoulos2011
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 14:16

8-|

Humm !!!!
Comment dire -> Tout simplement merci t un king.
Juste pour la petite histoire cela fait 4 heures que je suis dessus.
:shock: :shock:

Encore merci

ViPHP
ViPHP | 4039 Messages

07 juil. 2011, 14:19

8-|

Humm !!!!
Comment dire -> Tout simplement merci t un king.
Juste pour la petite histoire cela fait 4 heures que je suis dessus.
:shock: :shock:

Encore merci
Lire la documentation aurais peut-être servi..
http://be.php.net/manual/fr/function.sort.php

:roll:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

krapoulos2011
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 14:52

Merci encore