<?php
// array of characters depending on other characters
$characters = array(
'a' => array('c'),
'b' => array('c', 'a'),
'd' => array('c', 'a'),
'c' => array(),
'l' => array('c'),
'f' => array('l'),
't' => array('a'),
'w' => array('c', 'a'),
);
function sortCharacters($characters)
{
uksort ($characters, function ($a, $b) use ($characters) {
if (empty($characters[$a]) && empty($characters[$b])) {
// equal (no dependencies)
return 0;
}
if (empty($characters[$a]) && !empty($characters[$b])) {
// a has no dependencies so is lower
return -1;
}
if (!empty($characters[$a]) && empty($characters[$b])) {
// b has no dependencies so a is higher
return 1;
}
if (in_array($a, $characters[$b])) {
// b depends on a so a is lower
return -1;
}
if (in_array($b, $characters[$a])) {
// a depends on b so a is higher
return 1;
}
return 0;
});
return $characters;
}
$characters = sortCharacters($characters);
print_r($characters);