A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures can be nested.
A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java string.
A number is very much like a C or Java number, except that the octal and hexadecimal formats are not used.
[
"aaa",
"bbb",
"1234"
]
ObjectNormalizer
или GetSetMethodNormalizer
, раз решили через сеттеры/геттеры с сущностями работать$obj = $this->normalizer->denormalize($data, YourEntity::class);
<?php
// Ваши данные в упрощенном виде (без мусора)
$array = [
'numbers' => [
[
'numbers' => [
[
'formattedValue' => 111,
],
[
'formattedValue' => 3333,
],
[
'formattedValue' => 5555,
],
],
],
[
'numbers' => [
[
'formattedValue' => 200111,
],
[
'formattedValue' => 2003333,
],
[
'formattedValue' => 2005555,
],
],
],
],
];
// Найдет все значения во всех вложенных элементах с нужным ключом
// и сделает это рекурсивно — то есть во всех массивах и их детях.
function searchValues(array $arr, string $search, array $res = []): array {
array_walk_recursive($arr, function($value, $key) use (&$res, $search) {
if ($key === $search) {
$res[] = $value;
}
});
return $res;
}
// Ищем в нашем массиве все значения с ключом `formattedValue`
// и складываем найденные значения в пустой массив (по дефолту),
// но можно передать 3-м параметром и имеющийся массив, тогда значения туда добавятся.
$result = searchValues($array, 'formattedValue')
var_dump($result);
<?php
$data = [
[
'id' => 4,
],
[
'id' => 1,
'start' => 1,
'end' => 50,
'parent_id' => 4,
],
[
'id' => 1,
'start' => 10,
'end' => 50,
'parent_id' => 4,
],
[
'id' => 1,
'start' => 5,
'end' => 100,
'parent_id' => 4,
],
];
function aggregateExtremumBorders(array $elements) {
return array_reduce($elements, function($res, $element) {
if (!isset($element['parent_id'])) {
return $res;
}
$parentId = $element['parent_id'];
$parent = $res[$parentId] ?? ['id' => $parentId, 'min' => null, 'max' => null];
$parent['min'] = min($parent['min'], $element['start']) ?: $element['start'];
$parent['max'] = max($parent['max'], $element['end']) ?: $element['end'];
$res[$parentId] = $parent;
return $res;
}, []);
}
var_dump(aggregateExtremumBorders($data));
то как быть с ситуацией, когда в некоторых модулях должны производиться сложные выборки с фильтрами, агрегацией, затрагивающие сущности (entity) других модулей?
А в чем подвох? Почему без round не работает?
$date1 = Carbon::createMidnightDate(2016, 1, 5); // <-- тут любой способ создания объекта
$date2 = Carbon::createMidnightDate(2017, 3, 15);
echo $date1->diffInDays($date2); // 435
echo $date1->diffInWeekdays($date2); // 311
echo $date1->diffInWeekendDays($date2); // 124
echo $date1->diffInWeeks($date2); // 62
echo $date1->diffInMonths($date2); // 14
echo $date1->diffInQuarters($date2); // 4
echo $date1->diffInYears($date2); // 1
<?php
$now = new DateTime();
$date = new DateTime('2020-05-10');
$diff = $date->diff($now)->format("%a");
var_dump($diff);