fork download
  1. <?php
  2.  
  3. $data = json_decode(
  4. '[
  5. {"ids": [9,10]},
  6. {"ids": [1]},
  7. {"ids": [3]},
  8. {"ids": [4,5]},
  9. {"ids": [1,2]},
  10. {"ids": [5,8]},
  11. {"ids": [8]},
  12. {"ids": [2,3]},
  13. {"ids": [10]},
  14. {"ids": [11]}
  15. ]', true
  16. );
  17.  
  18. $groups = array();
  19. $results = array();
  20.  
  21. while (!empty($data)) {
  22. $values = reset($data);
  23. $group = $result = array();
  24. $value = reset($data);
  25. addNumbersToGroup($value['ids'], $group);
  26. reset($group);
  27. do {
  28. searchValues(key($group), $group, $result);
  29. } while (next($group));
  30. $groups[] = $group;
  31. $results[] = $result;
  32. }
  33.  
  34. echo json_encode($results);
  35. var_dump($results);
  36.  
  37. function addNumbersToGroup($values, &$group) {
  38. foreach ($values as $number) {
  39. $group[$number] = !empty($group[$number]) ? $group[$number]++ : 1;
  40. }
  41. }
  42.  
  43. function searchValues($item, &$group, &$result) {
  44. global $data;
  45. foreach ($data as $key=>$value) {
  46. if (in_array($item, $value['ids'])) {
  47. $result[] = $value;
  48. addNumbersToGroup($value['ids'], $group);
  49. unset($value);
  50. unset($data[$key]);
  51. }
  52. }
  53. }
  54.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
[[{"ids":[9,10]},{"ids":[10]}],[{"ids":[1]},{"ids":[1,2]},{"ids":[2,3]},{"ids":[3]}],[{"ids":[4,5]},{"ids":[5,8]},{"ids":[8]}],[{"ids":[11]}]]array(4) {
  [0]=>
  array(2) {
    [0]=>
    array(1) {
      ["ids"]=>
      array(2) {
        [0]=>
        int(9)
        [1]=>
        int(10)
      }
    }
    [1]=>
    array(1) {
      ["ids"]=>
      array(1) {
        [0]=>
        int(10)
      }
    }
  }
  [1]=>
  array(4) {
    [0]=>
    array(1) {
      ["ids"]=>
      array(1) {
        [0]=>
        int(1)
      }
    }
    [1]=>
    array(1) {
      ["ids"]=>
      array(2) {
        [0]=>
        int(1)
        [1]=>
        int(2)
      }
    }
    [2]=>
    array(1) {
      ["ids"]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        int(3)
      }
    }
    [3]=>
    array(1) {
      ["ids"]=>
      array(1) {
        [0]=>
        int(3)
      }
    }
  }
  [2]=>
  array(3) {
    [0]=>
    array(1) {
      ["ids"]=>
      array(2) {
        [0]=>
        int(4)
        [1]=>
        int(5)
      }
    }
    [1]=>
    array(1) {
      ["ids"]=>
      array(2) {
        [0]=>
        int(5)
        [1]=>
        int(8)
      }
    }
    [2]=>
    array(1) {
      ["ids"]=>
      array(1) {
        [0]=>
        int(8)
      }
    }
  }
  [3]=>
  array(1) {
    [0]=>
    array(1) {
      ["ids"]=>
      array(1) {
        [0]=>
        int(11)
      }
    }
  }
}