$arr = ['a', 'b', 'a', 'e', 'g', 'g', 'a'];

$count_per_values = array_count_values($arr);
$res = [];
$i = 0;
foreach ($count_per_values as $key => $val) {

$res[] = [
        'val' => $key,
        'count' => $val,
        'pos' => $i++,
];

}

usort($res, function ($a, $b) {

if ($a['count'] == $b['count']) {
    return $a['pos'] == $b['pos'] ? 0 : $a['pos'] > $b['pos'] ? 1 : -1;
} else {
    return $a['count'] > $b['count'] ? -1 : 1;
}

});
echo "

";
print_r($res);