Сортировать 2d массив в 3d массив PHP - PullRequest
0 голосов
/ 29 сентября 2010

Я пытаюсь понять, как отсортировать 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-массив, где каждый массив 2-го уровня содержит все задачи, назначенные одному пользователю. Есть простой способ сделать это? Самым близким, что я нашел, был array_multsort, но это не совсем то, что я хочу.

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

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

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

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Так что, если я понимаю, ваш массив будет иметь следующий порядок:

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));
    }
}
1 голос
/ 29 сентября 2010

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

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

Это даст вам массив, где ключи - это идентификаторы назначенного лица, а подмассивы - назначенные им задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...