Есть массив, внутри которого элементы могут зависеть друг от друга. Например, вот такой:
$items = [
'item_a' => ['require' => ['item_b']], // этот элемент зависит от 'item_b'
'item_b' => ['require' => []], // этот элемент не зависит от других
'item_c' => ['require' => ['item_a']],
'item_d' => ['require' => ['item_a', 'item_e']], // этот элемент зависит сразу от двух других - 'item_a' и 'item_b'
'item_e' => ['require' => ['item_a']],
];
И нужно его отсортировать так, чтобы зависимые элементы шли всегда после тех элементов, от которых они зависят. В моем примере порядок ключей в результате сортировки будет такой:
'item_b', 'item_a', 'item_c', 'item_e', 'item_d'
Собственно, вопрос: как такую сортировку выполнить? Идеально, если есть какие-то готовые библиотеки для подобных сортировок.
ЗЫ. Ясень пень, что могут быть и циклические зависимости и это тоже надо как-то учитывать.