Se me ha ocurrido esta forma curiosa Código PHP:
<script>
color=[]
elegido=[]
vez=0;
function este(color,probabilidad){
this.color=color;
this.probabilidad=probabilidad;
}
color[0]=new este("rojo",40);
color[1]=new este("azul",30);
color[2]=new este("amarillo",10);
color[3]=new este("naranja",20);
for(a=0;a<color.length;a++){
for(b=0;b<color[a].probabilidad;b++){
elegido[vez]=color[a].color;
vez+=1;
}
}
seleccionado=parseInt(vez*Math.random(1));
alert(elegido[seleccionado]);
</script>