So the ArrayCollection is a simple class that implements Countable, IteratorAggregate, ArrayAccess SPL interfaces, and the interface Selectable made by Benjamin Eberlei.
Not much information there if you are not familliar with SPL interfaces, but ArrayCollection - permit you to save the object instances in an array like form but in an OOP way. The benefit of using the ArrayCollection, instead of standard array is that this will save you a lot of time and work, when you will need simple methods like count, set, unset iterate to a certain object, and most of all very important:
- Symfony2 uses ArrayCollectionin his core and is doing a lot of things for you if you configure it well:
- will generate the mapping for your relationships "one-to-one, many-to-one ... etc"
- will bind the data for you when you create embedded forms
 
When to use it:
- Usually it is used for the object relationship mapping, when using - doctrine, it is recommended to just add- annotationsfor your properties and then after the command- doctrine:generate:entitythe setters and getters will be created, and for relationships like- one-to-many|many-to-manyin the constructor class will be instantiated the- ArrayCollectionclass instead of just a simple- array
 - public function __construct()
{
    $this->orders = new ArrayCollection();
}
 
- An example of use: - public function indexAction()
{
    $em = $this->getDoctrine();
    $client = $em->getRepository('AcmeCustomerBundle:Customer')
                 ->find($this->getUser());
    // When you will need to lazy load all the orders for your 
    // customer that is an one-to-many relationship in the database 
    // you use it:
    $orders = $client->getOrders(); //getOrders is an ArrayCollection
}
 - Actually you are not using it directly but you use it when you configure your models when setting setters and getters.