values = $e; $r->merged = false; $r->result = false; return $r; }, $input); for ($workKey = 0; $workKey < count($workArray); $workKey += 1) { $workElem = $workArray[$workKey]; if ($workElem->merged) continue; for ($searchKey = 0; $searchKey < count($workArray); $searchKey += 1) { $searchElem = $workArray[$searchKey]; if ($searchElem->merged || ($searchKey == $workKey)) continue; if (count(array_intersect($workElem->values, $searchElem->values)) > 0) { $workElem->values = array_unique(array_merge($workElem->values, $searchElem->values)); $searchElem->merged = true; } } $workElem->result = true; } return array_values( array_map(function ($item) { return $item->values; }, array_filter($workArray, function ($item) { return $item->result && !$item->merged; }))); }