protected function reduceNodeVariantsByWorkspaces(array $nodes, array $workspaces)
{
$foundNodes = [];
$minimalPositionByIdentifier = [];
/** @var $node NodeData */
foreach ($nodes as $node) {
// Find the position of the workspace, a smaller value means more priority
$workspaceNames = array_map(function (Workspace $workspace) {
return $workspace->getName();
}, $workspaces);
$workspacePosition = array_search($node->getWorkspace()->getName(), $workspaceNames);
$uniqueNodeDataIdentity = $node->getIdentifier() . '|' . $node->getDimensionsHash();
if (!isset($minimalPositionByIdentifier[$uniqueNodeDataIdentity]) || $workspacePosition < $minimalPositionByIdentifier[$uniqueNodeDataIdentity]) {
$foundNodes[$uniqueNodeDataIdentity] = $node;
$minimalPositionByIdentifier[$uniqueNodeDataIdentity] = $workspacePosition;
}
}
return $foundNodes;
}