Como fazer um loop adequadamente através de uma matriz?

votos
1

Eu estou tentando implementar uma solução para descobrir o MÊS que tem o maior número de páginas. Alguém sabe como fazer um loop embora essa matriz JSON para que eu possa talvez extrair o $ total para cada mês ($ Total1, $ total2, $ total3, ... $ total12) e então talvez adicioná-los a uma matriz e, em seguida, encontrar o número máximo (ou seja, o mês que tem a maioria das páginas)?

Esta é a maneira que eu estou tentando até agora para um único mês:

   foreach($my_array as $value){
                  foreach ($value->all_books as $all_book) {
                      foreach ($all_book->number_of_pages as $num_page) {
                        if ($num_page->number_of_books && $num_page->pages) {
                       $total += $num_page->number_of_books * $num_page->pages;
                      }
               }
          }
    }
Publicado 20/09/2018 em 04:14
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Você pode contar contagem de páginas do mês como este:

$monthWisePageCount = array();
foreach($my_array as $value){
    $month = date('M', strtotime($value->datetime_status));
          if(!in_array($month, array_keys($monthWisePageCount))){
               $monthWisePageCount[$month]['count'] =  0;
               $monthWisePageCount[$month]['month'] =  date('F', strtotime($value->datetime_status));
          }
            foreach ($value->all_books as $all_book) {
                      foreach ($all_book->number_of_pages as $num_page) {
                        if ($num_page->number_of_books && $num_page->pages) {
                             $monthWisePageCount[$month]['count'] += $num_page->number_of_books * $num_page->pages;
                      }
               }
          }

    }
print_r($monthWisePageCount);

O resultado será parecido com este

  Array
(
    [Mar] => Array
        (
            [count] => 900
            [month] => March
        )

    [Dec] => Array
        (
            [count] => 558
            [month] => December
        )

    [Oct] => Array
        (
            [count] => 280
            [month] => October
        )

)

Você pode encontrar o maior item da seguinte forma:

    $largestKey = '';
    $largestCount = 0 ; 
    foreach($monthWisePageCount as $key => $item){
           if($item['count'] > $largestCount ) {
               $largestCount = $item['count'];
                $largestKey =   $key;
           }
    }
 $monthWithLargestPageCount = $monthWisePageCount[$largestKey];
 print_r($monthWithLargestPageCount);

O resultado será como este

Array ( [count] => 900 [month] => March )
Respondeu 20/09/2018 em 04:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more