fork download
  1. <?php
  2.  
  3. $a1 = array(279171, 438170);
  4. $a2 = array(279171, 438156, 438157);
  5. $a3 = array(279171, 438178);
  6. $a4 = array(279172, 436113, 436115);
  7. $a5 = array(279172, 436113, 438108);
  8.  
  9. $input = array($a1, $a2, $a3, $a4, $a5);
  10.  
  11. $result = array();
  12.  
  13. foreach( $input as $item) {
  14. pushBranch( $item, $result);
  15. }
  16.  
  17. function pushBranch( $arr, &$result) {
  18. $len = count( $arr);
  19. for($i=0, $cursor = &$result; $i<$len; $i++) {
  20. $el = $arr[ $i];
  21. if( $i === $len-1 // last
  22. && !array_key_exists( $el, $cursor)
  23. && false === array_search( $el, $cursor, true))
  24. {
  25. array_push( $cursor, $el);
  26. } else { // middle
  27. if( array_key_exists( $el, $cursor)) {
  28. $cursor = &$cursor[ $el];
  29. } else {
  30. $key = array_search( $el, $cursor, true);
  31. if( false !== $key) unset( $cursor[ $key]);
  32. $cursor[ $el] = array();
  33. $cursor = &$cursor[ $el];
  34. }
  35. }
  36. }
  37. }
  38.  
  39. print_r( $result);
  40.  
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Array
(
    [279171] => Array
        (
            [0] => 438170
            [438156] => Array
                (
                    [0] => 438157
                )

            [438157] => 438178
        )

    [279172] => Array
        (
            [436113] => Array
                (
                    [0] => 436115
                    [1] => 438108
                )

        )

)