Сумма многомерного массива - PullRequest
0 голосов
/ 04 ноября 2018

Мне нужно предложить. Я получаю многомерный массив с именем $ dettaglioOre в контроллере laravel, и я пытаюсь dd ($ dettaglioOre), и это результат:

array array:5  
  0 => array:2 [▼
     "categoria" => 1
     "ore" => "3.00"
]
  1 => array:2 [▼
    "categoria" => 2
    "ore" => "2.00"
]
  2 => array:2 [▼
     "categoria" => 3
     "ore" => "6.00"
]
  3 => array:2 [▼
     "categoria" => 1
     "ore" => "6.00"
]
  4 => array:2 [▼
     "categoria" => 2
     "ore" => "4.00"
]
]

Как я могу группировать по категориям с суммой часов?

вроде так:

Категория 1 = 9 часов

Категория 2 = 6 часов

категория 3 = 6 часов

Большое спасибо ...

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Последнее, что ...

Если поле категорий находится во взаимосвязи (один ко многим), которая называется categoryorIntervento, после получения результата, чтобы посмотреть, как я могу показать имя категории, а не идентификатор?

У меня есть попытка

foreach($result as $res)
{
 {{ $res['ore']->categoriaIntervento->name
}

... но не работает.

Спасибо;)

0 голосов
/ 04 ноября 2018

вы можете попробовать это-

$newArray = array();
foreach($array as $data) {
    if(!array_key_exists($data['categoria'], $newArray))
        $newArray[ $data['categoria'] ] = 0;
    $newArray[ $data['categoria'] ] += (double)$data['ore'];
}
0 голосов
/ 04 ноября 2018
$array = [  
  [
     "categoria" => 1,
     "ore" => "3.00"
],
  [
    "categoria" => 2,
    "ore" => "2.00"
],
  [
     "categoria" => 3,
     "ore" => "6.00"
],
  [
     "categoria" => 1,
     "ore" => "6.00"
],
 [
     "categoria" => 2,
     "ore" => "4.00"
]
];

foreach($array as $key => $row){
   $grouped[$row['categoria']] += $row['ore'];
}

echo '<pre>';
print_r($grouped);
0 голосов
/ 04 ноября 2018

Группировать можно с помощью Collections:

    $items = [
        [
            "categoria" => 1,
            "ore" => "3.00"
        ],
        [
            "categoria" => 2,
            "ore" => "2.00"
        ],
        [
            "categoria" => 3,
            "ore" => "6.00"
        ],
        [
            "categoria" => 1,
            "ore" => "6.00"
        ],
        [
            "categoria" => 2,
            "ore" => "4.00"
        ]
    ];
    $result = collect($items)
        ->groupBy("categoria")
        ->map(function ($item) {
            $item = collect($item);
            return [
                "categoria" => $item[0]["categoria"],
                "ore_sum" => $item->sum("ore")
            ];
        });

    dd($result->toArray());

Вот результат:

array:3 [▼
  1 => array:2 [▼
    "categoria" => 1
    "ore_sum" => 9.0
  ]
  2 => array:2 [▼
    "categoria" => 2
    "ore_sum" => 6.0
  ]
  3 => array:2 [▼
    "categoria" => 3
    "ore_sum" => 6.0
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...