Try following code instead:
$prod_cat = array();
$id = (int) get_the_ID();
$taxonomy = 'product_cat';
if ( !empty($id) && !empty($taxonomy) )
{
$args = array('orderby' => 'term_id', 'order' => 'ASC', 'fields' => 'all');
$prod_cat = wp_get_object_terms( $id, $taxonomy, $args );
wp_cache_add($id, $prod_cat, $taxonomy . '_relationships');
$prod_cat = apply_filters( 'get_the_terms', $prod_cat, $id, $taxonomy );
}
if (!empty($prod_cat))
{
$trail_array = '';
$parent_cats = array();
foreach ($prod_cat as $cat) {
if(!empty($cat->parent))
{
if (!in_array($cat->parent, $parent_cats, false)) $parent_cats[] = (int) $cat->parent;
}
else
{
if (!in_array(0, $parent_cats, false)) $parent_cats[] = (int) 0;
}
}
$i = 0;
foreach ($parent_cats as $parent_cat) {
foreach ($prod_cat as $cat) {
if ( !empty($cat->name) && isset($cat->parent) && $cat->parent == $parent_cat )
{
if ( $i == 0 )
{
$trail_array .= '<a href="'. get_term_link( $cat->slug, $taxonomy ) .'">' . $cat->name . '</a>,';
}
else
{
$trail_array .= ' <span class="sep">' . $separator . '</span> ' . '<a href="'. get_term_link( $cat->slug, $taxonomy ) .'">' . $cat->name . '</a>,';
}
}
}
$trail_array = (substr($trail_array,-1) == ',') ? substr($trail_array, 0, -1) : $trail_array;
$i++;
}
$trail[] = $trail_array;
}
}