Probability suite for an array of elements
A few little things:

Don't put comments in between function declarations and curly braces (or anything similar to that like classes or methods)

That's hard to read and an eye sore. Put your function comments above the function itself. Ideally using standard docblock format. 

/**
* Generates a valid, random probability distribution for a given array of elements, that can be used in conjunction with "probSelect()".
*   
* @param   array    $arr        An array of elements
* @param   float    $control    A value that decides how much mass is allowed to be unilaterally dumped onto one element. A high value would permit distributions where most of the mass is concentrated on one element. 
* @return  array                An associative array where the keys are the elements in the original array, and the values are their probabilities. 
*/
function probGen(array $arr, float $control = 0.01) 
{


Use better variable names

What does $arr mean? I can guess that it is probably an array but my IDE can already tell me that. What's actually in that array? $elements would be a better name based on the function comments. A better name would be $elementsOfSomething where something accurately describe the characteristic of those elements.

Always use curly braces for control structures    

Although it is perfectly valid syntax to omit curly braces when a control structure only contains one line of code. But it is a best practice to always use them as they make the code more rreadable and prevent future errors. Future you or another developer may want to add a line to a control block and introduce a hard to find bug because they didn't realize the curly braces weren't there.

if($var &lt;= $sum)
    return $key;


should be:

if($var &lt;= $sum) {
    return $key;
}


Use echo over print()

print() is an alias of echo but there are minor differences between the two. Although they don't come into play here, it is the PHP convention to use echo for outputting content.

Don't output content from your functions

Your functions that do work and output content but only when there is an error are inconstant and doing too much. If you have an error, let the function report that back through a special return value (like false or null) or by throwing an exception. Let the calling code worry about reporting back the error and let the function focus on doing one thing and one thing only (just like a good OOP class should be doing).

You can simply statements that check for a Boolean to return a Boolean

Your statement return (sum($arr) == 1)?true:false; is checking if a statement is true and returning true if it is. false if it is false. So you can return the result of your conditional without having to explicitly return true or false because you already have that value:

return (sum($arr) == 1); // will return true or false


An alternative randx() function

The internet seems like it is already full of example functions that will generate a random float. They tend to be similar to the one below. Is there any reason you did not choose to go this route? It has fewer function calls so it should be more performant.

function frand($min, $max, $decimals = 0) {
  $scale = pow(10, $decimals);
  return mt_rand($min * $scale, $max * $scale) / $scale;
}

echo "frand(0, 10, 2) = " . frand(0, 10, 2) . "\n";


The PHP community prefers // to # for comments

Although # is a valid syntax for a one line comment in PHP, it is common practice to use //.