3v4l.org

run code in 300+ PHP versions simultaneously
<?php // $result = $conn->query("SELECT content, sub_content FROM objectives"); $result = [ ["content" => "Demonstrate where to find the following documentation:", "sub_content" => "Operating and Safety Strategy"], ["content" => "Explain the different turbine main operating states:", "sub_content" => "0"], ["content" => "Explain the different turbine main operating states:", "sub_content" => "Power Production"], ["content" => "Explain the different turbine main operating states:", "sub_content" => "Idle"], ["content" => "Explain the different turbine main operating states:", "sub_content" => "Stop"], ["content" => "Explain how to recognise the current operating mode on the display of the operating panel", "sub_content" => "0"], ["content" => "Explain the subsystem operating modes:", "sub_content" => "Stop"], ["content" => "Explain the subsystem operating modes:", "sub_content" => "Manual"], ["content" => "Explain the subsystem operating modes:", "sub_content" => "0"], ["content" => "Explain the difference between local and remote point of operation", "sub_content" => "0"], ["content" => "Explain that only one point of operation can be active at a time", "sub_content" => "0"] ]; $category = null; $output = ''; foreach ($result as $row) { if ($category !== $row['content']) { // new parent if ($category !== null) { // not first iteration $output .= "\t<li>$category"; // print parent if ($sublist) { $output .= "\n\t\t<ul>$sublist\n\t\t</ul>\n\t"; // print all children } $output .= "</li>\n"; } $category = $row['content']; // overwrite $category $sublist = ''; // reset sublist } if ($row['sub_content'] !== '0'){ // filter row $sublist .= "\n\t\t\t<li>{$row['sub_content']}</li>"; } } if ($result) { // in case the resultset is empty echo "<ul>\n"; echo $output; // print stored markup echo "\t<li>$category"; // print last parent if ($sublist) { echo "\n\t\t<ul>$sublist\n\t\t</ul>\n\t"; // print all children from last parent } echo "</li>\n"; echo "</ul>"; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 4, Position 2 = 31
Branch analysis from position: 4
2 jumps found. (Code = 78) Position 1 = 5, Position 2 = 31
Branch analysis from position: 5
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 22
Branch analysis from position: 8
2 jumps found. (Code = 43) Position 1 = 10, Position 2 = 19
Branch analysis from position: 10
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 18
Branch analysis from position: 14
2 jumps found. (Code = 43) Position 1 = 25, Position 2 = 30
Branch analysis from position: 25
1 jumps found. (Code = 42) Position 1 = 4
Branch analysis from position: 4
Branch analysis from position: 30
Branch analysis from position: 18
Branch analysis from position: 19
Branch analysis from position: 22
Branch analysis from position: 31
2 jumps found. (Code = 43) Position 1 = 33, Position 2 = 45
Branch analysis from position: 33
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 43
Branch analysis from position: 39
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 43
Branch analysis from position: 45
Branch analysis from position: 31
filename:       /in/uICaV
function name:  (null)
number of ops:  46
compiled vars:  !0 = $result, !1 = $category, !2 = $output, !3 = $row, !4 = $sublist
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   ASSIGN                                                   !0, <array>
   18     1        ASSIGN                                                   !1, null
   19     2        ASSIGN                                                   !2, ''
   20     3      > FE_RESET_R                                       $8      !0, ->31
          4    > > FE_FETCH_R                                               $8, !3, ->31
   21     5    >   FETCH_DIM_R                                      ~9      !3, 'content'
          6        IS_NOT_IDENTICAL                                         !1, ~9
          7      > JMPZ                                                     ~10, ->22
   22     8    >   TYPE_CHECK                                  1020          !1
          9      > JMPZ                                                     ~11, ->19
   23    10    >   NOP                                                      
         11        FAST_CONCAT                                      ~12     '%09%3Cli%3E', !1
         12        ASSIGN_OP                                     8          !2, ~12
   24    13      > JMPZ                                                     !4, ->18
   25    14    >   ROPE_INIT                                     3  ~15     '%0A%09%09%3Cul%3E'
         15        ROPE_ADD                                      1  ~15     ~15, !4
         16        ROPE_END                                      2  ~14     ~15, '%0A%09%09%3C%2Ful%3E%0A%09'
         17        ASSIGN_OP                                     8          !2, ~14
   27    18    >   ASSIGN_OP                                     8          !2, '%3C%2Fli%3E%0A'
   29    19    >   FETCH_DIM_R                                      ~19     !3, 'content'
         20        ASSIGN                                                   !1, ~19
   30    21        ASSIGN                                                   !4, ''
   32    22    >   FETCH_DIM_R                                      ~22     !3, 'sub_content'
         23        IS_NOT_IDENTICAL                                         ~22, '0'
         24      > JMPZ                                                     ~23, ->30
   33    25    >   ROPE_INIT                                     3  ~26     '%0A%09%09%09%3Cli%3E'
         26        FETCH_DIM_R                                      ~24     !3, 'sub_content'
         27        ROPE_ADD                                      1  ~26     ~26, ~24
         28        ROPE_END                                      2  ~25     ~26, '%3C%2Fli%3E'
         29        ASSIGN_OP                                     8          !4, ~25
   20    30    > > JMP                                                      ->4
         31    >   FE_FREE                                                  $8
   36    32      > JMPZ                                                     !0, ->45
   37    33    >   ECHO                                                     '%3Cul%3E%0A'
   38    34        ECHO                                                     !2
   39    35        NOP                                                      
         36        FAST_CONCAT                                      ~29     '%09%3Cli%3E', !1
         37        ECHO                                                     ~29
   40    38      > JMPZ                                                     !4, ->43
   41    39    >   ROPE_INIT                                     3  ~31     '%0A%09%09%3Cul%3E'
         40        ROPE_ADD                                      1  ~31     ~31, !4
         41        ROPE_END                                      2  ~30     ~31, '%0A%09%09%3C%2Ful%3E%0A%09'
         42        ECHO                                                     ~30
   43    43    >   ECHO                                                     '%3C%2Fli%3E%0A'
   44    44        ECHO                                                     '%3C%2Ful%3E'
   45    45    > > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
150.17 ms | 1012 KiB | 13 Q