Why use zip and not gzip or bzip2? The latter are better supported in Linux.
You could use two find commands. The first one to return the directories, and the second one to return files in that directory.
Code:
for dir in $(find basedir/ -type d); do
find $dir/ -maxdepth 1 -type f -print0 -exec tar czvf ${dir}.tar.gz '{}' +; done
Using zip the zip command and options will be different. Also read the docs in /usr/share/loc/zip. There may be a filesize limit (for files you are archiving) and an archive size limit; that you need to keep in mind.
However, why not simple archive the entire directory recursively?
Otherwise you end up with files mixed in with archives as a result.