Перестановка нулей в конце массива - Разбор решения алгоритмической

Финальный вариант:

$arr = [0, 3, 2, 1, 0, 3, 2, 4, 0, -5];
// [3, 2, 1, 3, 2, 4, -5, 0, 0, 0]

$shift = 0;
foreach ($arr as $key => $val) {
    if ($val === 0) {
       $shift++;
    } else {
       $arr[$key-$shift] = $val;
    }
}

for ($i=count($arr) - $shift; $i<count($arr); $i++  ) {
    $arr[$i] = 0;
}

// ответ
foreach ($arr as $key => $val) {
    echo $val . ' ';
}