Array sort

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Array sort

par Genova » 24 juil. 2007, 11:53

Pour le fonctionement de la fonction usort() elle est pas simple à comprendre, je te conseil de lire la doc qui la concerne pour la comprendre.

par Hywan » 24 juil. 2007, 11:53

L'avantage avec la mienne, c'est qu'on peut faire le trie qu'on veut en travaillant sur les bytes, et trier plusieurs données entre elles, mais il faut pousser un peu plus le script. Mais pour un tableau simple et un trie simple, utilise usort.

Tu n'as pas bien compris le fonctionnement d'usort ? Regarde la documentation, elle l'explique bien :)

par sylk » 24 juil. 2007, 11:47

Woua,

Je sais pas ce que ferai un codeur (aussi débutant soit-il...) sans les forums! T'as la solution qu'il te faut en 2 min. Ou du moins un piste, qui te permet de résoudre ton problème rapidement. De la balle.

Merci Genova, la fonction usort() fonctionne parfaitement pour ça (bien que je n'ai pas encore compris à 100% son fonctionnement). Merci à toi aussi mHyWaN, j'avais pas pensé à cette solution. Elle me sera surement utile un ces jours.

Bon appétit

Sylk

par Hywan » 24 juil. 2007, 11:29

Salut :)

Tu as plusieurs solutions pour trier ton tableau.
Soit tu revois l'architecture, de façon à avoir quelques choses qui ressemble à ça :

Code : Tout sélectionner

Array ( country_name => Array ( 0 => Russia, 1 => Australia, 2 => Austria ), b_nau_com => Array ( 0 => null, 1 => 1, 2 => 1 ) )
Dans ce cas, tu n'auras pas de problème. Tu tries simplement :
sort($array['country_name'], SORT_STRING);
Et tu retrouveras toutes tes données par association de clés.


Ou alors, si tu ne veux pas toucher à la structure, il y a une possibilité, mais c'est un peu plus compliqué. Ce système à l'avantage de pouvoir faire beaucoup de tries sur plusieurs données en même temps (même des inversions de tries etc.) :
<?php

header('content-type: text/plain');

// Ton tableau de base, on n'a pas touché à l'architecture.
$array = array(
    0 => array('country_name' => 'Russia'),
    1 => array('country_name' => 'Australia',
               'b_nau_com'    => 1),
    2 => array('country_name' => 'Austria',
               'b_nau_com'    => 1)
);

// On prépare les 2 variables.
// Sort est celle qui va avoir les noms des pays triés.
$sort   = array();
// Return est celle qui va contenir le résultat : ton tableau trié.
$return = array();

// On récupère tous les noms des pays dans le tableau sort.
foreach($array as $i => $value)
    $sort[] = $value['country_name'];

// On trie ce tableau sans modifier les clés.
// C'est le but de la fonction asort.
asort($sort, SORT_STRING);

// Par association de clés, on reconstruit ton tableau trié.
foreach($sort as $i => $foo)
    $return[] = $array[$i];

print_r($sort);
print_r($array);
print_r($return);
Ton résultat sera ($return) :

Code : Tout sélectionner

Array ( [0] => Array ( [country_name] => Australia [b_nau_com] => 1 ) [1] => Array ( [country_name] => Austria [b_nau_com] => 1 ) [2] => Array ( [country_name] => Russia ) )
Explore bien les fonctions de trie, il y en a beaucoup, et sont puissantes. Ici, je t'ai introduit la fonction asort(), qui permet de trier sans toucher aux clés. On voit l'avantage rapidement : on ne trie qu'une partie, on récupère les clés, et on reconstruit le tableau par association de clés.

C'est une méthode parmi tant d'autres. Je ne sais pas si c'est la meilleur, mais elle est rapide à concevoir :P

Edit : ou tu peux utiliser usort .... Je l'avais oublié celle là :cry:. (La guerre est déclarée ;-))

par Genova » 24 juil. 2007, 11:20

Bonjour, tu dois utiliser usort(), comme ceci :
function usort_callback($a, $b)
{
   return (strcmp($a['country_name'], $b['country_name']));
}

usort($ton_tableau, 'usort_callback');

Array sort

par sylk » 24 juil. 2007, 11:00

Hello,

Voilà, j'aurais besoin de trier les informations dans un tableau multidimensionel, mais je comprend pas exactement comment fonctionne .... la fonction.

Voici un extrait de mon tableau. En gros il faudrait que je puisse le trier pas "country_name", du coup Russia apparaitrait tout en bas.

Merci d'avance

Sylk


Array
(
    [0] => Array
        (
            [country_name] => Russia
        )

    [1] => Array
        (
            [country_name] => Australia
            [b_nau_com] => 1
        )

    [2] => Array
        (
            [country_name] => Austria
            [b_nau_com] => 1
        )
)