Open Source/plain-to-class/Использование/Анонимный массив

Анонимный массив

В случае если вам нужно преобразовать массив данных в массив объектов класса, вы можете реализовать это через анонимный массив. Для этого просто оберните класс в [].

$data = [
['id' => 1, 'name' => 'phone'],
['id' => 2, 'name' => 'bread'],
];
$products = ClassTransformer::transform([ProductDTO::class], $data);

В результате этого вы получите массив объектов ProductDTO:

array(2) {
[0]=>
object(ProductDTO) {
["id"]=> int(1)
["name"]=> string(5) "phone"
}
[1]=>
object(ProductDTO) {
["id"]=> int(2)
["name"]=> string(5) "bread"
}
}

Вам также может потребоваться поэлементное преобразование массива. В таком случае можно передать массив классов, который затем можно легко распаковать:

$userData = ['id' => 1, 'email' => 'test@test.com', 'balance' => 10012.23];
$purchaseData = [
'products' => [
['id' => 1, 'name' => 'phone'],
['id' => 2, 'name' => 'bread'],
],
'user' => ['id' => 3, 'email' => 'fake@mail.com', 'balance' => 10012.23],
];
$result = ClassTransformer::transform([UserDTO::class, PurchaseDTO::class], [$userData, $purchaseData]);
[$user, $purchase] = $result;
var_dump($user);
var_dump($purchase);

Результат:

object(UserDTO) (3) {
["id"] => int(1)
["email"]=> string(13) "test@test.com"
["balance"]=> float(10012.23)
}
object(PurchaseDTO) (2) {
["products"]=>
array(2) {
[0]=>
object(ProductDTO)#349 (3) {
["id"]=> int(1)
["name"]=> string(5) "phone"
}
[1]=>
object(ProductDTO)#348 (3) {
["id"]=> int(2)
["name"]=> string(5) "bread"
}
}
["user"]=>
object(UserDTO)#332 (3) {
["id"]=> int(3)
["email"]=> string(13) "fake@mail.com"
["balance"]=> float(10012.23)
}
}