将2d数组排序为3d数组PHP

时间:2010-09-28 22:20:33

标签: php arrays multidimensional-array

我正在试图弄清楚如何在PHP中将2d数组排序为3d数组。该数组包含管理树中用户的任务,目前按如下方式排列:

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 ) ) 

我想对它进行排序,使其成为一个3d数组,其中每个第二级数组包含分配给一个用户的所有任务。是否有捷径可寻?我发现最接近的是array_multsort,但这并不是我想要的。

*编辑 这基本上是我目前工作的公司的任务管理器应用程序。经理需要能够看到分配给员工的任务。我目前将员工和主管组织成一棵树,所以他们需要看到他们所在的一切。

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

简而言之,我想将这些任务分类为一个三维数组,其中每个第二级数组包含属于当前用户的一个“雇员”的任务。

2 个答案:

答案 0 :(得分:1)

我不太明白你的目标是什么,但如果你想制作一个新的阵列,由受让人列出任务,那么你可以使用以下内容。

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

这将为您提供一个数组,其中键是受理人ID,子数组是分配给它们的任务。

答案 1 :(得分: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));
    }
}