arrays.rst 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. Serailizing arrays and hashes
  2. =============================
  3. Introduction
  4. ------------
  5. Serializing arrays and hashes (a concept that in PHP has not explicit boundaries)
  6. can be challenging. The serializer offers via ``@Type`` annotation different options
  7. to configure its behavior, but if we try to serialize directly an array
  8. (not as a property of an object), we need to use context information to determine the
  9. array "type"
  10. Examples
  11. --------
  12. In case of a JSON serialization:
  13. .. code-block :: php
  14. <?php
  15. // default (let the PHP's json_encode function decide)
  16. $serializer->serialize([1, 2]); // [1, 2]
  17. $serializer->serialize(['a', 'b']); // ['a', 'b']
  18. $serializer->serialize(['c' => 'd']); // {"c" => "d"}
  19. // same as default (let the PHP's json_encode function decide)
  20. $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array')); // [1, 2]
  21. $serializer->serialize([1 => 2], SerializationContext::create()->setInitialType('array')); // {"1": 2}
  22. $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array')); // ['a', 'b']
  23. $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array')); // {"c" => "d"}
  24. // typehint as strict array, keys will be always discarded
  25. $serializer->serialize([], SerializationContext::create()->setInitialType('array<integer>')); // []
  26. $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array<integer>')); // [1, 2]
  27. $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array<integer>')); // ['a', 'b']
  28. $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array<string>')); // ["d"]
  29. // typehint as hash, keys will be always considered
  30. $serializer->serialize([], SerializationContext::create()->setInitialType('array<integer,integer>')); // {}
  31. $serializer->serialize([1, 2], SerializationContext::create()->setInitialType('array<integer,integer>')); // {"0" : 1, "1" : 2}
  32. $serializer->serialize(['a', 'b'], SerializationContext::create()->setInitialType('array<integer,integer>')); // {"0" : "a", "1" : "b"}
  33. $serializer->serialize(['c' => 'd'], SerializationContext::create()->setInitialType('array<string,string>')); // {"d" : "d"}
  34. .. note ::
  35. This applies only for the JSON and YAML serialization.