2016-09-22 2 views
0

j'ai un tableau comme:tableau Trier et tableaux enfants en valeur

$array = array(
    4 => array(
     'position' => 0 
     'children' => array(
     ) 
    ), 
    2 => array(
     'position' => 0 
     'children' => array(
      3 => array(
       'position' => 1 
      ) 
      5 => array(
       'position' => 0 
      ) 
     ) 
    ) 
) 

je dois trier les tableaux extérieurs (2 & 4) par « position » clé ascendant (0 vers le haut), et puis trier chaque tableau intérieur de ceux («enfants»), par leur position respective.

Il peut y avoir 6 tableaux principaux, avec 6 tableaux enfants pour trier.

Quelle est la meilleure façon de faire cela?

Répondre

1

Si je comprends votre explication du problème correctement, le code suivant fonctionnera pour vous:

//sort the outer array 
usort($array, function($a, $b) { 
    return $a['position'] - $b['position']; 
}); 
//sort childrens 
foreach ($array as &$item) { 
    usort($item['children'], function($a, $b) { 
     return $a['position'] - $b['position']; 
    }); 
} 

Dans tous les cas, usort est une fonction native php qui sera très pratique pour les cas décrits. http://php.net/manual/en/function.usort.php

+0

Voir J'ai essayé. Je ne suis pas passé par référence cependant, cela aurait-il pu être mon problème? J'ai depuis changé cela donc je n'en ai pas besoin. –

+1

Oui, vous devez passer sous-tableau par référence afin de le changer –