No, there's no limit to the number of elseif statements beyond memory usage. Which is a lot.
The problem is this:
if($Add_on1 = "plain only-$0.95"):
, these are assignments, not comparisons. To compare use == or the strcmp function. As soon as you assign, it automatically is successful so only the first ever triggers and $Add_on1 is assigned this value.
Using if/else with this many though would probably be easier to use a switch statement:
case 'plain only-$0.95':
case 'Chicken with egg & cheese - $2.50':
And so forth.
Depending on overall rules, you can use explode to break the text from the dollar amount by using the hyphen as the delimiter.
$aParts = explode('-', $Add_on1);
$sDescription = trim($aParts);
$dPrice = trim($aParts, ' $');
Now you can pick the description and price out of the $Add_on1 without needing to if/elseif or switch them.