2010-09-28 5 views
0

J'essaie de comprendre comment trier un tableau 2d dans un tableau 3d en PHP. Le tableau contient les tâches des utilisateurs dans un arbre de gestion et est actuellement aménagée comme ceci:Trier tableau 2d en tableau 3d PHP

Array ([0] => Array ([Title] => Test Task [Author] => 5 [DateIn] => 2010-09-15 [Deadline] => 2010-09-30 [Position] => 1 [Description] => This is a test task [Assignee] => 3) [1] => Array ([Title] => Test Task [Author] => 5 [DateIn] => 2010-09-15 [Deadline] => 2010-09-29 [Position] => 1 [Description] => Blah blah [Assignee] => 3)) 

Je veux faire le tri pour que ce soit un tableau 3D où chaque rangée de niveau 2 contient toutes les tâches assignées à un utilisateur. Y a-t-il un moyen facile de faire ceci? La chose la plus proche que j'ai trouvée était array_multsort, mais cela ne fait pas tout à fait ce que je veux.

* Modifications Il s'agit essentiellement d'une application de gestion des tâches pour l'entreprise pour laquelle je travaille actuellement. Les gestionnaires doivent être en mesure de voir les tâches qui ont été assignées à leurs employés. J'ai actuellement des employés et des superviseurs organisés dans un arbre, donc ils ont besoin de voir tout dans leur branche.

À l'heure actuelle, la fonction que j'ai écrite renvoie les tâches pour les employés de chaque «gestionnaire» triées sans ordre particulier. Pour réduire l'encombrement, je dois pouvoir afficher uniquement les tâches d'un employé à la fois. Actuellement, cela n'est pas possible, car la structure du tableau est telle qu'il contient simplement une liste de toutes les tâches où l'auteur est marqué comme l'utilisateur actuel. En bref, je voudrais trier ces tâches dans un tableau à trois dimensions, où chaque tableau de deuxième niveau contient les tâches appartenant à un «employé» appartenant à l'utilisateur actuel.

+0

Nous avons certainement besoin de plus d'informations pour vous aider – Galen

Répondre

1

Je ne comprends pas très bien ce que vous voulez savoir, mais si vous voulez produire un nouveau tableau qui répertorie les tâches par cessionnaire, alors vous pouvez utiliser ce qui suit.

foreach ($old as $task) 
    $new[$task['Assignee']][] = $task; 

Cela vous donnera un tableau dont les clés sont les ID et les cessionnaires sous-réseaux sont les tâches qui leur sont assignées.

1

Donc, si je comprends bien, votre tableau aura l'arrangement suivant:

manager1 
    employee1 
     task1 
    employee2 
     task2 
     task3 
manager2 
    employee3 
. 
. 
. 

Est-ce exact? Si oui, en supposant que "auteur" est le gestionnaire et "cessionnaire" est l'employé, essayez ce qui suit:

$new_array = array(); 
foreach($old_array as $task){ 
    if(array_key_exists($task["author"], $new_array)){ // the manager already has an array slot 
     if(array_key_exists($task["assignee"], $new_array[$task["author"]])){ // the employee already has an array slot under this manager 
      array_push($new_array[$task["author"]][$task["assignee"]], $task); 
     } else { // manager exists, employee doesn't 
      $new_array[$task["author"]][$task["assignee"]][0] = $task; 
     } 
    } else { // manager doesn't exist 
     $new_array[$task["author"]] = array($task["assignee"] => array($task)); 
    } 
}