3v4l.org

run code in 300+ PHP versions simultaneously
<?php $rows = [ ['name' => 'name_one', 'y' => '2016', 'q' => '2', 'st' => 1], ['name' => 'name_one', 'y' => '2017', 'q' => '3', 'st' => 2], ['name' => 'name_two', 'y' => '2017', 'q' => '1', 'st' => 1], ['name' => 'name_two', 'y' => '2017', 'q' => '2', 'st' => 2], ]; $data = []; $names = []; $years = []; $qs = []; foreach ($rows as $row) { $link = &$data; foreach (['name', 'y'] as $field) { if (!isset($link[$row[$field]])) $link[$row[$field]] = []; $link = &$link[$row[$field]]; } $link[$row['q']] = $row['st']; unset($link); // $names[$row['name']] = true; $years[$row['y']] = true; $qs[$row['q']] = true; } // Опционально сортируем $names = array_keys($names); sort($names); $years = array_keys($years); sort($years); $qs = array_keys($qs); sort($qs); ?> <table> <tr> <th>Name <?foreach($years as $y):?> <th colspan="<?=count($qs)?>"><?=$y?> <?endforeach?> <tr> <th>&nbsp; <?foreach($years as $y):?> <?foreach($qs as $q):?> <th>q<?=$q?> <?endforeach?> <?endforeach?> <?foreach($names as $name):?> <tr> <td><?=$name?> <?foreach($years as $y):?> <?foreach($qs as $q):?> <td><?=isset($data[$name][$y][$q]) ? $data[$name][$y][$q] : '' ?></td> <?endforeach?> <?endforeach?> <?endforeach?> </table>
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 6, Position 2 = 37
Branch analysis from position: 6
2 jumps found. (Code = 78) Position 1 = 7, Position 2 = 37
Branch analysis from position: 7
2 jumps found. (Code = 77) Position 1 = 9, Position 2 = 21
Branch analysis from position: 9
2 jumps found. (Code = 78) Position 1 = 10, Position 2 = 21
Branch analysis from position: 10
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 17
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 9
Branch analysis from position: 9
Branch analysis from position: 17
Branch analysis from position: 21
1 jumps found. (Code = 42) Position 1 = 6
Branch analysis from position: 6
Branch analysis from position: 21
Branch analysis from position: 37
2 jumps found. (Code = 77) Position 1 = 61, Position 2 = 69
Branch analysis from position: 61
2 jumps found. (Code = 78) Position 1 = 62, Position 2 = 69
Branch analysis from position: 62
1 jumps found. (Code = 42) Position 1 = 61
Branch analysis from position: 61
Branch analysis from position: 69
2 jumps found. (Code = 77) Position 1 = 72, Position 2 = 83
Branch analysis from position: 72
2 jumps found. (Code = 78) Position 1 = 73, Position 2 = 83
Branch analysis from position: 73
2 jumps found. (Code = 77) Position 1 = 75, Position 2 = 80
Branch analysis from position: 75
2 jumps found. (Code = 78) Position 1 = 76, Position 2 = 80
Branch analysis from position: 76
1 jumps found. (Code = 42) Position 1 = 75
Branch analysis from position: 75
Branch analysis from position: 80
1 jumps found. (Code = 42) Position 1 = 72
Branch analysis from position: 72
Branch analysis from position: 80
Branch analysis from position: 83
2 jumps found. (Code = 77) Position 1 = 86, Position 2 = 115
Branch analysis from position: 86
2 jumps found. (Code = 78) Position 1 = 87, Position 2 = 115
Branch analysis from position: 87
2 jumps found. (Code = 77) Position 1 = 91, Position 2 = 112
Branch analysis from position: 91
2 jumps found. (Code = 78) Position 1 = 92, Position 2 = 112
Branch analysis from position: 92
2 jumps found. (Code = 77) Position 1 = 94, Position 2 = 109
Branch analysis from position: 94
2 jumps found. (Code = 78) Position 1 = 95, Position 2 = 109
Branch analysis from position: 95
2 jumps found. (Code = 43) Position 1 = 100, Position 2 = 105
Branch analysis from position: 100
1 jumps found. (Code = 42) Position 1 = 106
Branch analysis from position: 106
1 jumps found. (Code = 42) Position 1 = 94
Branch analysis from position: 94
Branch analysis from position: 105
1 jumps found. (Code = 42) Position 1 = 94
Branch analysis from position: 94
Branch analysis from position: 109
1 jumps found. (Code = 42) Position 1 = 91
Branch analysis from position: 91
Branch analysis from position: 109
Branch analysis from position: 112
1 jumps found. (Code = 42) Position 1 = 86
Branch analysis from position: 86
Branch analysis from position: 112
Branch analysis from position: 115
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 115
Branch analysis from position: 83
Branch analysis from position: 69
Branch analysis from position: 37
filename:       /in/gGKeH
function name:  (null)
number of ops:  118
compiled vars:  !0 = $rows, !1 = $data, !2 = $names, !3 = $years, !4 = $qs, !5 = $row, !6 = $link, !7 = $field, !8 = $y, !9 = $q, !10 = $name
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
   10     1        ASSIGN                                                   !1, <array>
   12     2        ASSIGN                                                   !2, <array>
   13     3        ASSIGN                                                   !3, <array>
   14     4        ASSIGN                                                   !4, <array>
   16     5      > FE_RESET_R                                       $16     !0, ->37
          6    > > FE_FETCH_R                                               $16, !5, ->37
   17     7    >   ASSIGN_REF                                               !6, !1
   18     8      > FE_RESET_R                                       $18     <array>, ->21
          9    > > FE_FETCH_R                                               $18, !7, ->21
   19    10    >   FETCH_DIM_R                                      ~19     !5, !7
         11        ISSET_ISEMPTY_DIM_OBJ                         0  ~20     !6, ~19
         12        BOOL_NOT                                         ~21     ~20
         13      > JMPZ                                                     ~21, ->17
         14    >   FETCH_DIM_R                                      ~22     !5, !7
         15        ASSIGN_DIM                                               !6, ~22
         16        OP_DATA                                                  <array>
   20    17    >   FETCH_DIM_R                                      ~24     !5, !7
         18        FETCH_DIM_W                                      $25     !6, ~24
         19        ASSIGN_REF                                               !6, $25
   18    20      > JMP                                                      ->9
         21    >   FE_FREE                                                  $18
   22    22        FETCH_DIM_R                                      ~27     !5, 'q'
         23        FETCH_DIM_R                                      ~29     !5, 'st'
         24        ASSIGN_DIM                                               !6, ~27
         25        OP_DATA                                                  ~29
   23    26        UNSET_CV                                                 !6
   25    27        FETCH_DIM_R                                      ~30     !5, 'name'
         28        ASSIGN_DIM                                               !2, ~30
         29        OP_DATA                                                  <true>
   26    30        FETCH_DIM_R                                      ~32     !5, 'y'
         31        ASSIGN_DIM                                               !3, ~32
         32        OP_DATA                                                  <true>
   27    33        FETCH_DIM_R                                      ~34     !5, 'q'
         34        ASSIGN_DIM                                               !4, ~34
         35        OP_DATA                                                  <true>
   16    36      > JMP                                                      ->6
         37    >   FE_FREE                                                  $16
   30    38        INIT_FCALL                                               'array_keys'
         39        SEND_VAR                                                 !2
         40        DO_ICALL                                         $36     
         41        ASSIGN                                                   !2, $36
         42        INIT_FCALL                                               'sort'
         43        SEND_REF                                                 !2
         44        DO_ICALL                                                 
   31    45        INIT_FCALL                                               'array_keys'
         46        SEND_VAR                                                 !3
         47        DO_ICALL                                         $39     
         48        ASSIGN                                                   !3, $39
         49        INIT_FCALL                                               'sort'
         50        SEND_REF                                                 !3
         51        DO_ICALL                                                 
   32    52        INIT_FCALL                                               'array_keys'
         53        SEND_VAR                                                 !4
         54        DO_ICALL                                         $42     
         55        ASSIGN                                                   !4, $42
         56        INIT_FCALL                                               'sort'
         57        SEND_REF                                                 !4
         58        DO_ICALL                                                 
   35    59        ECHO                                                     '%0A%3Ctable%3E%0A++%3Ctr%3E%0A++++++%3Cth%3EName%0A++++++'
   39    60      > FE_RESET_R                                       $45     !3, ->69
         61    > > FE_FETCH_R                                               $45, !8, ->69
   40    62    >   ECHO                                                     '++++++++%3Cth+colspan%3D%22'
         63        COUNT                                            ~46     !4
         64        ECHO                                                     ~46
         65        ECHO                                                     '%22%3E'
         66        ECHO                                                     !8
   41    67        ECHO                                                     '++++++'
   39    68      > JMP                                                      ->61
         69    >   FE_FREE                                                  $45
   42    70        ECHO                                                     '++%3Ctr%3E%0A++++++%3Cth%3E%26nbsp%3B%0A++++++'
   44    71      > FE_RESET_R                                       $47     !3, ->83
         72    > > FE_FETCH_R                                               $47, !8, ->83
   45    73    >   ECHO                                                     '++++++++'
         74      > FE_RESET_R                                       $48     !4, ->80
         75    > > FE_FETCH_R                                               $48, !9, ->80
   46    76    >   ECHO                                                     '++++++++++%3Cth%3Eq'
         77        ECHO                                                     !9
   47    78        ECHO                                                     '++++++++'
   45    79      > JMP                                                      ->75
         80    >   FE_FREE                                                  $48
   48    81        ECHO                                                     '++++++'
   44    82      > JMP                                                      ->72
         83    >   FE_FREE                                                  $47
   49    84        ECHO                                                     '++++++%0A++'
   50    85      > FE_RESET_R                                       $49     !2, ->115
         86    > > FE_FETCH_R                                               $49, !10, ->115
   51    87    >   ECHO                                                     '++++%3Ctr%3E%0A++++++%3Ctd%3E'
   52    88        ECHO                                                     !10
   53    89        ECHO                                                     '++++'
         90      > FE_RESET_R                                       $50     !3, ->112
         91    > > FE_FETCH_R                                               $50, !8, ->112
   54    92    >   ECHO                                                     '++++++'
         93      > FE_RESET_R                                       $51     !4, ->109
         94    > > FE_FETCH_R                                               $51, !9, ->109
   55    95    >   ECHO                                                     '++++++++%3Ctd%3E'
         96        FETCH_DIM_IS                                     ~52     !1, !10
         97        FETCH_DIM_IS                                     ~53     ~52, !8
         98        ISSET_ISEMPTY_DIM_OBJ                         0          ~53, !9
         99      > JMPZ                                                     ~54, ->105
        100    >   FETCH_DIM_R                                      ~55     !1, !10
        101        FETCH_DIM_R                                      ~56     ~55, !8
        102        FETCH_DIM_R                                      ~57     ~56, !9
        103        QM_ASSIGN                                        ~58     ~57
        104      > JMP                                                      ->106
        105    >   QM_ASSIGN                                        ~58     ''
        106    >   ECHO                                                     ~58
        107        ECHO                                                     '%3C%2Ftd%3E%0A++++++'
   54   108      > JMP                                                      ->94
        109    >   FE_FREE                                                  $51
   57   110        ECHO                                                     '++++'
   53   111      > JMP                                                      ->91
        112    >   FE_FREE                                                  $50
   58   113        ECHO                                                     '++'
   50   114      > JMP                                                      ->86
        115    >   FE_FREE                                                  $49
   59   116        ECHO                                                     '%3C%2Ftable%3E'
        117      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
142.5 ms | 1029 KiB | 15 Q