Forse non ti è chiara una cosa.

Quando scrivi:

$prodotto = array('disponibilita'=>'si','quantita'=>'quantita' ,'prezzp'=>'prezzo');

è come scrivere:

$prodotto['disponibilita'] = 'si';
$prodotto['quantita'] = 'quantita';
$prodotto['prezzp'] = 'prezzo'; //Qui penso che volevi scrivere prezzo e non prezzp

Quindi in $prodotto['prezzo'] c'è il valore STRINGA 'prezzo' così come in $prodotto['quanita'] c'è la stringa 'quantita'.

Quindi perché inizializzare $prodotto['quantita'] con 'quantita' se poi dopo gli dai valore 50? Tanto vale scrivere direttamente:

$prodotto = array('disponibilita'=>'si', 'quantita'=>50, 'prezzo'=>'prezzo', 'si' => 'si');

echo'
';
//print_r ($prodotto);
$prezzo=1500;
$portfolio =500;

if ($prodotto['si'] == 'si')
{
echo 'ARTICOLO DISPONIBILE
'; //Questo esce sicuramente a video
}


if ($prodotto['quantita'] >1)
{
echo 'ARTICOLO DISPONIBILE IN QUANTITA GROSSE!
'; //Anke questo esce a video
//perché abbiamo assegnato il
//valore 50 a $prodotto['quantita']
}

if ($prodotto['prezzo'] > $portfolio)
{
echo 'PAGAMENTO A RATE
';

/* Questo, invece, non viene mostrato a video. Infatti $prodotto['prezzo'] contiene la
stringa 'prezzo' e con l'if tu è come se faccessi:

if ('prezzo' < 50)

cioé confronti una stringa con un numero. In tal caso php converte 50 in una stringa e
fa:
if ('prezzo' < '50')

e confronta le 2 stringhe ed i numeri vengono sempre prima delle lettere per cui la stringa
'50' è + piccola della stringa 'prezzo' quindi non viene visualizzato l'echo che tu hai fatto.
*/
}