usort работает нормально.Функция, переданная usort, должна быть функцией сравнения, которая возвращает значение меньше единицы, если ab, и 0, если a == b.Из-за того, как ваши массивы отформатированы, ваша функция сравнения должна сравнивать [[name]] и b ['name'].Итак:
function cmp($a, $b)
{
return strcmp($a['name'],$b['name']);
}
$a = array(array("id" => 2, "name" => "Donald"),array("id" => 3, "name" => "Goofy"),array("id" => 4, "name" => "Mickey"));
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: ".$value['name']."\n";
}