Aller au contenu

Classement resultat d'un tableau


Sujets conseillés

Posté

Bonjour à toutes et à tous.

Je suis énervée car depuis hier soir sur ce truc, et je n'y arrive pas (Php n'étant pas mon fort).

Voilà, J'ai un tableau de ce style :

Array (
[0] => Array ( [0] => 117 [1] => A )
[1] => Array ( [0] => 12 [1] => B )
[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 5 [1] => A )
)


J'aimerai trier ce tableau pour classer les résultats suivant :
- ordre alpabetique des data[1]
- puis décroissant numerique des data[0]

En fait comme ceci :

A 117
A 5
B 45
B 12

Merci pour la personne qui voudrait bien m'aider

sandy

Posté

Salut,

il te faut un tableau resultat ? comme ca ?

Array (
[0] => Array ( [0] => 117 [1] => A)
[1] => Array ( [0] => 5 [1] => A )
[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 12 [1] => B )
)

Seb

Posté

SStephane chapeau !

Je suis incapable actuellement de pondre un code comme ça.

Mais ton code fonctionne pour ce tableau de depart :

$arr = array(
array(117,'A'),
array(12,'B'),
array(45,'B'),
array(5,'A'),

);

mais pas pour le mien qui est présenté de cette façon :

$arr = Array (
[0] => Array ( [0] => 117 [1] => A )
[1] => Array ( [0] => 12 [1] => B )
[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 5 [1] => A )
)

et qui dois finir exactement comme cela :

$arr = Array (
[0] => Array ( [0] => 117 [1] => A )

[1] => Array ( [0] => 5 [1] => A )

[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 12 [1] => B )
)

Je doute que j'y arrive seule

Posté

pourtant :

$arr = array(
array(117,'A'),
array(12,'B'),
array(45,'B'),
array(5,'A'),

);

est l'équivalent au tien .

celui la :

$arr = Array (
[0] => Array ( [0] => 117 [1] => A )
[1] => Array ( [0] => 12 [1] => B )
[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 5 [1] => A )
)

ca ressemble plus à un resultat d'un print_r ou d'un truc comme ca

on peut voir le bout de code avant ?, comment est construit $arr ?

Posté

C'est effectivement une réplique du tableau que tu présentes, s'il est différent, ça ne fonctionnera pas, poste le nous, il suffit d'arranger la fonction déléguée au tri


Posté

Désolée de ne pas vous avoir répondu plus tôt SStephane et SFTA26700 :


en tout cas, un grand merci de vous intéresser à mon cas.



Voici le code :



foreach($go->item as $item)
{$tab[] = array((string)$item['product'],(string)$item->color,(string)$item->label;}

echo '<pre>';
print_r($tab);
echo '</pre>';

en fait les chiffres c'est $item['product'] et les lettres A,B c'est $item->label

Posté (modifié)

y a pas un truc louche ?

ca me rappelle un test PHP sur le site de SStephane

pourquoi dans chaque case de $tab tu as que 2 valeurs dans ton tableau resultat

$arr = Array (
[0] => Array ( [0] => 117 [1] => A )
[1] => Array ( [0] => 12 [1] => B )
[2] => Array ( [0] => 45 [1] => B )
[3] => Array ( [0] => 5 [1] => A )
)

alors que tu en insert 3

array((string)$item['product'],(string)$item->color,(string)$item->label;

d'ailleurs attention, il manque une paranthese fermante à la fin

et donc quand tu utilises la fonctione de SStephane apres ca fonctionne pas ?

foreach($go->item as $item)
{$tab[] = array((string)$item['product'],(string)$item->color,(string)$item->label);} //avec la paranthese qui manque

usort($tab, 'my_comp');

print_r($tab);

ca donne quoi ? un message d'erreur?

on peut voir l'objet $go aussi?

seb

Modifié par SFTA26700
Posté

1/ c'est normal, j'avais simplifié le code pour mieux comprendre (j'avais supprimé l'item color)

En fait le vrai code résultant de la print_r($tab) est :

Array (
[0] => Array ( [0] => 117 [1] => green [2] => A )
[1] => Array ( [0] => 12 [1] => green [2] => B )
[2] => Array ( [0] => 45 [1] => red [2] => B )
[3] => Array ( [0] => 5 [1] => yellow [2] => A )
)

2/ Pas de souci pour la parenthèse c'est une erreur de recopie pour mon post

3/ en fait il n'y a pas de message d'erreur

En fait ça à l'air de marcher, mais comme je vous ai donné un code simplifié avec 2 items à la place de 3items, et bien ca m'effectue le classement sur le 1er et le 2 eme item alors que je voudrais le classement sur le 1er et le 3eme item (je ne suis pas sûre d'être très clair...)

comment changer alors le code que vous m'avez fait ?

Posté

hmmm je dirais :



function my_comp($a,${
if($a[2]===$b[2]){
if($a[0]===$b[0]) return 0;
return ($a[0]>$b[0])? -1 : 1;
}
return ($a[2]>$b[2])? 1 : -1;
}
Posté (modifié)

J'adore ! Merci le code marche ! J'aurais pas été capable de l'écrire.



Maintenant que c'est fait, ça à l'air simple : je me pencherais dessus ce soir après le boulot pour bien le comprendre.



Un grand merci à SStephane et SFTA26700.



Webmaster-hub est mon site de prédilection quand j'ai vraiment besoin d'aide en php (après plusieurs heures de recherche personnelle infructueuse) !



Merci encore.



PS : pour info, est-ce cela une "comparaison de types en php" ? Est-ce le terme utilisé pour que j'effectue une recherche ?


Modifié par sandrinoo
Posté

Désolée, mais je me permet de revenir pour compliquer un peu la chose.

Soit mon array comme ceci :

Array ([0] => Array ( [0] => 117 [1] => green [2] => A )[1] => Array ( [0] => 12 [1] => green [2] => B )[2] => Array ( [0] => 45 [1] =>  red        [2] => B )[3] => Array ( [0] => 5 [1] => yellow [2] => A )[4] => Array ( [0] => 78 [1] =>  red        [2] => A ))

J'aimerai ajouter une 3eme condition au code que vous avez réalisé à savoir :

Trier array :

1. en priorité si valeur couleur est red $a[1]

2. puis sur la lettre ordre alphabétique $a[2] (déjà codé)

3. puis sur le nombre décroissant $a[0] (déjà codé)

En fait que le tableau trié donne cela :

[4] => Array ( [0] => 78 [1] => red [2] => A )[2] => Array ( [0] => 45 [1] => red [2] => B )[0] => Array ( [0] => 117 [1] => green [2] => A )[3] => Array ( [0] => 5 [1] => yellow [2] => A )[1] => Array ( [0] => 12 [1] => green [2] => B )

J'ai essayé de tester des codes de ce style sans résultat :

function my_comp($a,$B)
{if($a[1]=== 'red'])
{if($a[2]===$b[2]) return 0;return ($a[2]<$b[2])? -1 : 1;}
{if($a[0]===$b[0]) return 0;return ($a[0]>$b[0])? -1 : 1;}
return ($a[1]>$b[1])? 1 : -1;}
usort($arr, 'my_comp');

Posté

<?php

$arr = array (

array( 117 ,'green', 'A' ),

array( 12 ,'green', 'B' ),

array( 45 ,'red', 'B' ),

array( 5 ,'yellow', 'A' ),

array( 78 ,'red', 'A' ),

);

function my_comp($a,$B){

if($a[1]=== 'red' XOR $b[1]=== 'red'){

return ($a[1]==='red')? -1 : 1;

}

if($a[2]===$b[2]){

if($a[0]===$b[0]) return 0;

return ($a[0]>$b[0])? -1 : 1;

}

return ($a[2]>$b[2])? 1 : -1;

}

usort($arr, 'my_comp');

var_dump($arr);

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...