While the accepted answer works, it certainly is very tedious for a large amount of objects, such as in this case, since you have to edit a lot of parameters. Thus, a better solution would be as follows:

![enter image description here][1]

The components are fairly straight forward. The first Math node is just putting the input random value in the range from _0_ to _n_; then the other two after it are a [floor rounding][2]. Then this value is used in a MixRGB node to decide which image to use - if the _Fac_ is 0, it uses the top image, otherwise it uses the bottom image (since it can only be a integer, there's never any interpolation between different images). Then, if there still are images to choose from, what you can do is subtract one from the output of the floor function and use that as the _Fac_ between the previous mix and another image. Then you can use the _Random_ input, found in _Input>Object Info>Random_ to get a random texture.

It is fairly easy to expand this setup to allow more images:

![enter image description here][3]

And you can use the same process to expand it even further. Just remember to go out of the group and update the _n_ input too.

Here's a quick demonstration of how it works:

![enter image description here](https://i.sstatic.net/csfWO.gif)

[<img src="http://blend-exchange.giantcowfilms.com/embedImage.png?bid=325" />](http://blend-exchange.giantcowfilms.com/b/325/)

  [1]: https://i.sstatic.net/a0zja.png
  [2]: http://en.wikipedia.org/wiki/Floor_and_ceiling_functions
  [3]: https://i.sstatic.net/uQr5s.gif
  [4]: https://i.sstatic.net/csfWO.gif