3v4l.org

run code in 300+ PHP versions simultaneously
<?php $colors = array ('red','blue','green','yellow'); $boxes = array ('circular','squared','hexagonal','triangular'); $possible_combos = array ( array('circular','red','blue'), array('squared','red','green'), array('hexagonal','blue','yellow'), array('triangular','red','green') ); // collect constraints ordered by rarest foreach ($possible_combos as $constraint) { $box = array_shift($constraint); foreach ($constraint as $color) { $constraints[$color] []= $box; } } // assign rarest first to last asort($constraints); foreach ($constraints as $color => $allowedBoxes) { foreach ($allowedBoxes as $box) { $key = array_search($box, $boxes); // if we have a match, then remove it from the collection if ($key !== false) { $result[$box] = $color; unset($boxes[$key]); continue 2; } } } print_r($result);
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 4, Position 2 = 17
Branch analysis from position: 4
2 jumps found. (Code = 78) Position 1 = 5, Position 2 = 17
Branch analysis from position: 5
2 jumps found. (Code = 77) Position 1 = 10, Position 2 = 15
Branch analysis from position: 10
2 jumps found. (Code = 78) Position 1 = 11, Position 2 = 15
Branch analysis from position: 11
1 jumps found. (Code = 42) Position 1 = 10
Branch analysis from position: 10
Branch analysis from position: 15
1 jumps found. (Code = 42) Position 1 = 4
Branch analysis from position: 4
Branch analysis from position: 15
Branch analysis from position: 17
2 jumps found. (Code = 77) Position 1 = 22, Position 2 = 41
Branch analysis from position: 22
2 jumps found. (Code = 78) Position 1 = 23, Position 2 = 41
Branch analysis from position: 23
2 jumps found. (Code = 77) Position 1 = 25, Position 2 = 39
Branch analysis from position: 25
2 jumps found. (Code = 78) Position 1 = 26, Position 2 = 39
Branch analysis from position: 26
2 jumps found. (Code = 43) Position 1 = 33, Position 2 = 38
Branch analysis from position: 33
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
Branch analysis from position: 38
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
Branch analysis from position: 39
Branch analysis from position: 41
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 41
Branch analysis from position: 17
filename:       /in/u5pBK
function name:  (null)
number of ops:  46
compiled vars:  !0 = $colors, !1 = $boxes, !2 = $possible_combos, !3 = $constraint, !4 = $box, !5 = $color, !6 = $constraints, !7 = $allowedBoxes, !8 = $key, !9 = $result
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
    5     1        ASSIGN                                                   !1, <array>
    7     2        ASSIGN                                                   !2, <array>
   16     3      > FE_RESET_R                                       $13     !2, ->17
          4    > > FE_FETCH_R                                               $13, !3, ->17
   17     5    >   INIT_FCALL                                               'array_shift'
          6        SEND_REF                                                 !3
          7        DO_ICALL                                         $14     
          8        ASSIGN                                                   !4, $14
   18     9      > FE_RESET_R                                       $16     !3, ->15
         10    > > FE_FETCH_R                                               $16, !5, ->15
   19    11    >   FETCH_DIM_W                                      $17     !6, !5
         12        ASSIGN_DIM                                               $17
         13        OP_DATA                                                  !4
   18    14      > JMP                                                      ->10
         15    >   FE_FREE                                                  $16
   16    16      > JMP                                                      ->4
         17    >   FE_FREE                                                  $13
   24    18        INIT_FCALL                                               'asort'
         19        SEND_REF                                                 !6
         20        DO_ICALL                                                 
   25    21      > FE_RESET_R                                       $20     !6, ->41
         22    > > FE_FETCH_R                                       ~21     $20, !7, ->41
         23    >   ASSIGN                                                   !5, ~21
   26    24      > FE_RESET_R                                       $23     !7, ->39
         25    > > FE_FETCH_R                                               $23, !4, ->39
   27    26    >   INIT_FCALL                                               'array_search'
         27        SEND_VAR                                                 !4
         28        SEND_VAR                                                 !1
         29        DO_ICALL                                         $24     
         30        ASSIGN                                                   !8, $24
   29    31        TYPE_CHECK                                  1018          !8
         32      > JMPZ                                                     ~26, ->38
   30    33    >   ASSIGN_DIM                                               !9, !4
         34        OP_DATA                                                  !5
   31    35        UNSET_DIM                                                !1, !8
   32    36        FE_FREE                                                  $23
         37      > JMP                                                      ->22
   26    38    > > JMP                                                      ->25
         39    >   FE_FREE                                                  $23
   25    40      > JMP                                                      ->22
         41    >   FE_FREE                                                  $20
   37    42        INIT_FCALL                                               'print_r'
         43        SEND_VAR                                                 !9
         44        DO_ICALL                                                 
         45      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
138.23 ms | 1008 KiB | 17 Q