2010-09-28 2 views
0

Я пытаюсь выяснить, как отсортировать массив 2d в 3d-массиве в PHP. Массив содержит задачи от пользователей в дереве управления и в настоящее время организованы следующим образом:Сортировка 2d массива в 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)) 

Я хочу, чтобы отсортировать его так, что это 3d массив, где каждый массив второго уровня содержит все задачи, поставленные одному пользователю. Есть простой способ сделать это? Самое близкое, что я нашел, это array_multsort, но это не совсем то, что я хочу.

* Редакции Это приложение для диспетчера задач для компании, в которой я сейчас работаю. Менеджеры должны иметь возможность видеть задачи, которые были назначены их сотрудникам. В настоящее время у меня есть сотрудники и супервайзеры, организованные в дерево, поэтому им нужно увидеть все в своей отрасли.

В настоящее время функция, которую я написал, возвращает задания для сотрудников каждого «менеджера», отсортированные в определенном порядке. Чтобы уменьшить беспорядок, мне нужно иметь возможность отображать только задачи «сотрудника» одновременно. В настоящее время это невозможно, так как структура массива такова, что он просто содержит список всех задач, в которых автор помечен как текущий пользователь.

Короче говоря, я хотел бы отсортировать эти задачи в трехмерном массиве, где каждый массив 2-го уровня содержит задачи, принадлежащие одному «сотруднику», принадлежащему текущему пользователю.

+0

Нам определенно нужна дополнительная информация, которая поможет вам – Galen

ответ

1

Я не совсем понимаю, к чему вы клоните, но если вы хотите создать новый массив, в котором перечислены задачи у правопреемника, вы можете использовать следующее.

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

Это даст вам массив, в котором ключи являются идентификаторы цессионарий и суб массивы являются задачи, поставленные перед ними.

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)); 
    } 
} 
Смежные вопросы