One suggestion would be to have a cookie containing an array of shopping cart items, not an array of cookies....
As it is, you're not renaming your cookies, so when you've got cookies Zero, One, Two and Three, and delete Two, you're left with Zero, One and Three. Of course, to change Three into Two, you'll need to read the contents of Three, set Two with those same contents, and delete Three by setting it to have already expired. You'll have a situation where the item being reindexed is listed twice, for a while.
If you used a single cookie containing an array of cart items, instead of an array of cookies, you could use all of PHP's array functions (especially array_values() to repack the elements into consecutive indices).
Your loop could be improved as well - for one thing, drop the confusing double negatives; for another - once you've found something you don't need to keep looking for it.
$item=false;
for ($i=0;$i<$count_cart;$i++)
{ if ($grab_cookie[$i] != "")
{ $item = true;
break;
}
}
if ($item)
{
$count_current_cookie = count($grab_cookie);
$count_current_cookie++;
setcookie("phpcartdata[$count_current_cookie]", $cart_data, time()+300);
}
else
{ setcookie("phpcartdata[0]", $cart_data, time()+300);
}