2

J'ai un tableau PHP qui ressemble à ceci: http://pastie.org/1346063 (voir pastie par exemple de tableau)Organiser un tableau multidimensionnel

Ce que je veux faire est re-trier ce tableau dans un autre tableau qui est triée par array [votes] [POINTS] sous-tableau numériquement décroissant. Le tableau dont la valeur est la plus élevée [votes] [POINTS] sera le premier listé dans le tableau principal.

Répondre

3

En utilisant la fonction usort() nous pouvons créer notre propre fonction de comparaison:

function cmp($a, $b) { 
    if($a['votes']['POINTS'] == $b['votes']['POINTS']) { 
     return 0; 
    } 
    return ($a['votes']['POINTS'] < $b['votes']['POINTS']) ? 1 : -1; 
} 

usort($array, 'cmp'); 

Résultats:

En utilisant les données de test avec une structure similaire à la vôtre:

Array 
(
    [0] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 5 
       ) 

     ) 

    [1] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 4 
       ) 

     ) 

    [2] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 2 
       ) 

     ) 

    [3] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 1 
       ) 

     ) 

) 
+0

Cette fonction que vous m'avez donnée ne semble pas fonctionner. Je ne suis pas sûr que ce soit CodeIgniter, ou quelque chose dans la fonction. J'ai essayé de charger cette fonction en tant que plugin, et il semble faire erreur. Je ne suis pas sûr de l'erreur, car mes erreurs ne sont pas visibles. Le seul moment où l'erreur se produit est lors de l'appel de la fonction usort avec cmp. – DevNull

+0

La fonction elle-même fonctionne. Je ne suis pas très familier avec CI, cependant, vous devriez être capable de créer cette fonction dans votre modèle et l'appeler simplement. Par défaut, CI peut enregistrer toutes les erreurs, ce qui peut valoir la peine de vérifier votre application/logs ou l'emplacement des journaux. –

+0

@DevNull Assurez-vous de NE PAS affecter la valeur de retour de 'usort' à' $ array'! 'usort' modifie le tableau d'entrée, il ne renvoie pas le tableau trié. – Rudie

0

Solution: -

Suppose, votre tableau est stocké dans une variable appelée $ data

Vous pouvez tout simplement votre sorte tableau multidimensionnel avec array_multisort

foreach ($data as $key => $row) { 
    $points[$key] = $row['votes']['points']; 
} 

// Sort the data with points descending 
array_multisort($points, SORT_DESC, $data); 

Hope this helps.