I think the function is not named properly. You are NOT shuffling an associative array. You are shuffling a numerically indexed array (whose values happen to be associative arrays). As such, I don't see a great need for this function. You could use `array_rand()` to pick random keys from the array. Now, assuming you did want to keep such a function, for example to actually get array of values not just keys. I would consider a few things: - Consider throwing an exception or logging error if function is passed a non-array value. This can help make sure you are invoking this function properly in your code vs. just returning the passed value unchanged. - Consider passing "limit" value to the function vs. hard-coding for 4 return elements. This might yield something like: function array_rand_values($arr, $limit = 1) { if(!is_array($arr)) { throw new InvalidArgumentException('Array expected for first argument.'); } if(!is_int($limit)) { throw new InvalidArgumentException('Integer expected for second argument.'); } if(count($arr) <= $limit) { return shuffle($arr); } $keys = array_rand($arr, $limit); $values = array(); for ($i = 0; $i < $limit; $i++) { $values[] = $arr[$keys[$i]]; } return $values; }