2010-09-28 40 views
0

我想弄清楚如何在PHP中将二维数组排序成一个3d数组。该数组包含来自用户的任务管理树,目前正在安排像这样:排序为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)) 

我希望如此,它的每个二级数组包含了所有分配给一个用户的任务三维数组排序。是否有捷径可寻?我发现最接近的是array_multsort,但这并不完全符合我的要求。

*编辑 这基本上是我目前工作的公司的任务管理器应用程序。经理需要能够看到已分配给其员工的任务。我目前将员工和主管人员组织在一棵树中,因此他们需要查看其分支中的所有内容。

现在,我写的函数返回每个“经理”的员工的任务排序没有特定的顺序。为了减少混乱,我需要一次只能显示一个“员工”的任务。目前这是不可能的,因为数组的结构是这样的,它仅包含作者被标记为当前用户的所有任务的列表。

简而言之,我想将这些任务排序为一个3维数组,其中每个第2级数组包含属于当前用户的一个“员工”的任务。

+0

我们肯定需要更多信息来帮助您 – Galen 2010-09-28 22:23:46

回答

1

我不太明白你在做什么,但是如果你想产生一个新的数组来列出受让人的任务,那么你可以使用以下内容。

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

这会给你一个数组,其中的键是受让人ID,子数组是分配给他们的任务。

1

所以,如果我明白了,你的阵列将具有以下安排:

manager1 
    employee1 
     task1 
    employee2 
     task2 
     task3 
manager2 
    employee3 
. 
. 
. 

这是正确的吗?如果是这样,那么假设“作者”是经理,“受让人”是员工,请尝试以下操作:

$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)); 
    } 
}