У вас ошибка: когда вы делаете рекурсивный вызов, найденные в нём значения НЕ объединяются с текущими. Вот так должно быть:
$array_temp += get_cat_recursive($value['id'], $array_check, $array_temp);
А лучше передавать массив для результата по ссылке и каждый вызов функции будет добавлять в него то, что он нашёл. Исходный массив тоже желательно по ссылке, чтобы при каждом вызове функции не происходило его копирование в памяти.
function get_cat_recursive($id_check, &$array_check, &$array_temp)
{
foreach ($array_check as $key => $value) {
if ( $id_check == $value['parent_id']) {
array_push($array_temp, $value['id']);
get_cat_recursive($value['id'], $array_check, $array_temp);
}
}
}
// Использование
$result = []; // При первом вызове функции передаём пустой массив
get_cat_recursive(2, $all_cats, $result);
print_r($result);