private function GetTableColumns(array $Columns, array $CurrentColumns)
{
$ColumnNamesMap = array_flip(array_keys($Columns));
$CurrentColumnNamesMap = array_flip(array_keys($CurrentColumns));
$ColumnNamesToModify = array_intersect_key($CurrentColumnNamesMap, $ColumnNamesMap);
$ColumnsToModify = [];
foreach ($ColumnNamesToModify as $ColumnName => $CurrentPosition) {
$Position = $ColumnNamesMap[$ColumnName];
if ($Columns[$ColumnName]->Is($CurrentColumns[$ColumnName]) && $Position === $CurrentPosition) {
continue;
}
$ColumnsToModify[$Position] = $Columns[$ColumnName];
}
$ColumnNamesToAdd = array_diff_key($ColumnNamesMap, $CurrentColumnNamesMap);
$ColumnsToAdd = [];
foreach ($ColumnNamesToAdd as $ColumnName => $Position) {
$ColumnsToAdd[$Position] = $Columns[$ColumnName];
}
$ColumnNamesToRemove = array_diff_key($CurrentColumnNamesMap, $ColumnNamesMap);
$ColumnsToRemove = [];
foreach ($ColumnNamesToRemove as $ColumnName => $Position) {
$ColumnsToRemove[$Position] = $CurrentColumns[$ColumnName];
}
return [$ColumnsToModify, $ColumnsToAdd, $ColumnsToRemove];
}