2010-10-19 6 views
1

Ok je le tableau suivant:PHP Tri des tableaux utilisant des nœuds enfants?

Array 
(
    [0] => Array 
    (
     [id] => 6 
     [name] => This Course 
     [time] => 1288082700 
     [description] => blah blah . 
     [link] => http://this.com/?g=5 
     [course] => 22 
    ) 

[1] => Array 
    (
     [id] => 2 
     [name] => Workshop 
     [time] => 1287561600 
     [description] => This description 
     [link] => http://this.com/?g=5 
     [session] => 8 
     [course] => 23 
     [type] => standard 
     [adobelink] => 
    ) 

)

Comment puis-je régler ce tableau entier en utilisant la touche « temps » intérieure?

Merci!

Répondre

4

Utilisation usort():

Cette fonction permet de trier un tableau par ses valeurs en utilisant une fonction de comparaison fournie par l'utilisateur. Si le tableau que vous souhaitez trier doit être trié selon des critères non triviaux, vous devez utiliser cette fonction.

Exemple:

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

usort($array, 'cmp'); 

Bien sûr, cela échouera si un tableau ne comporte aucun élément time. Que faut-il dépend alors de vos besoins afin que je quitterai l'erreur de manipulation pour vous;)

1
http://dk.php.net/usort 

function sortByTime($a, $b) 
{ 
if ($a['time'] > $b['time']) 
{ 
    return 1; 
} 
else if ($a['time'] < $b['time']) 
{ 
    return -1; 
} 
return 0; 
} 

usort($yourArray, 'sortByTime'); 
+0

seraient ces fonctions fonctionnent s'il y avait plus de 2 entrées si? – Fearghal

+0

Oui! car pratiquement toutes les réponses ici sont similaires et ça a marché! Merci les gars!! – Fearghal

+0

Cette fonction fonctionnera avec un grand nombre d'entrées. L'usort de PHP appelle la fonction nommée pour chaque paire de valeurs dans le tableau. –

3

Utilisez la fonction usort() PHP: http://php.net/manual/en/function.usort.php

D'abord, définir une fonction qui décidera de comparer les résultats pour votre structure de données:

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

Ensuite, appelez usort() et donner la NMAE de votre fonction à elle:

usort($array, "cmp"); 

Vous avez terminé!

2

uasort() va maintain your keys .

uasort($a, function($a, $b) { 
    $a = $a['time']; // Assuming keys exist 
    $b = $b['time']; 
    if ($a == $b) { 
     return 0; 
    } else { 
     return $a < $b ? -1 : 1; // Reverse < if sort order is wrong 
    } 
}); 

syntaxe de la fonction Anonymous nécessite PHP 5.3+! Passez le nom de la fonction de comparaison si < 5.3 (voir autres réponses).

1) Si vous vous souciez des touches, aussi. Sinon, il suffit d'utiliser l'approche usort() trouvée en abondance ci-dessus :) La fonction de comparaison est fondamentalement identique (sauf pour elegant approach @ codaddict).

+0

Peut-être que vous devriez noter que votre code nécessite PHP 5.3. –

+1

Ajout au commentaire de Felix, spécifiquement c'est la fonction anonyme qui nécessite PHP 5.3, et pas 'uasort()'. – BoltClock

+0

@Felix Kling Bon point. Édité. – jensgram

5

Vous pouvez utiliser la fonction usort comme:

function cmp($a,$b) { 
     return $a['time'] - $b['time']; 
} 

usort($arr,'cmp'); 

Working link

+0

+ 1 pour la brièveté (quel embarras que je ne pensais pas à ce sujet) et le lien –

+0

B-e-a-utiful. (15 caractères) – jensgram

+0

Oui, ça marche si bien! Fonctionne avec des sous-sous-éléments – tylerpenney