Calculate future date based on business days (using Objects)
First of all, you can get away from having to deal with weekends altogether by using:

$to-&gt;modify('+1 weekday');


I think using the above and due to the nature of your function just needing to count X number of "valid" days from  given day, that you are kind of wasting your time using DatePeriod and DateInterval (both classes that usually I am a big proponent for their use).

Here this can be as simple as the following code:

function addWorkingDays(DateTime $from, $dayCount)
{
    $datetime = clone $from;
    while($dayCount &gt; 0) {
        $datetime-&gt;modify('+1 weekday');
        if(!isHoliday($datetime)) {
            $dayCount--;
        }
    }
    return $datetime;
}

function isHoliday(DateTime $datetime)
{
    // holiday calculation logic here
    // return boolean
}


Note a few things here:


Here I require the caller to pass a valid DateTime object for $from.  Your current function just kind of assumes $from is valid value from which a DateTime object can be instantiated.  I would go ahead and remove all uncertainty from the function and require a DateTime object to operate against. In your usage example, it would be just as easy to pass new DateTime('now') to the function.
I have defined a separate function isHoliday() where one could define their holiday determination logic.  This also gives possible re-use outside the context of this function.  I wasn't quite sold on your holiday logic. I would think it would be rather trivial to actually get better data structure here to look up against (why the *- part?  that is not necessary to simply compare month and day)  Should you be using holiday dates as key in array instead of value to allow for direct lookup, vs. iterating array using in_array()? I did not specify an implementation of this function, as really, you might want to build a more robust listing of holidays well out into the future if you have any variable date holidays.
I renamed the function to perhaps better indicate what it is doing - adding working days to a given date, not getting the number of working days in some interval.