src/SnooPHP/Model/Migration.php
protected static function computeDependencies(array $tables)
	{
		/** @todo vulnerable to circular dependencies */
		$result = [];
		while (!empty($tables))
		{
			// Circular dependency check variable
			$num = count($tables);

			foreach ($tables as $i => $table)
				if (!$table->dependent())
				{
					$result[] = $table;

					// Remove from list
					// and free dependent tables
					unset($tables[$i]);
					foreach ($tables as $t) $t->removeDependency($table->name());
				}
			
			// If no dependency-free table is found
			// there is probably a circular dependency
			// nothing we can do about it
			if (count($tables) === $num) return false;
		}

		return $result;
	}
protected static function computeDependencies(array $tables)
	{
		/** @todo vulnerable to circular dependencies */
		$result = [];
		while (!empty($tables))
		{
			// Circular dependency check variable
			$num = count($tables);

			foreach ($tables as $i => $table)
				if (!$table->dependent())
				{
					$result[] = $table;

					// Remove from list
					// and free dependent tables
					unset($tables[$i]);
					foreach ($tables as $t) $t->removeDependency($table->name());
				}
			
			// If no dependency-free table is found
			// there is probably a circular dependency
			// nothing we can do about it
			if (count($tables) === $num) return false;
		}

		return $result;
	}
Compute table dependencies

This method reorders table to avoid dependencies problems
when creating/deleting tables

@param Table[] $tables list of tables

@return array|bool return reordered list of tables or false if fails