You asked how you could add a password to a zip file using PHP. This can't be done with the PHP zip functions.
You could password protect the page that provides the download. But the downloaded zip file will not contain a password.
You could encrypt the file before zipping. Then the user would need to have some other method of decrypting the file after the download. The decryption method would need to reside on the user's desktop, so php would not be available, unless the user is running a local (desktop) instance of PHP.
So far as I know, there is no method to password protect csv or text files either.
In your scenarios, the user would use a password to unprotect the zip file before unzipping. The unzipped file file then exist in clear text on the user's desktop anyway. What is gained by password-protecting the zip file in the first place?
My suggestion is that you password-protect ACCESS to the file you want to download. This is typical, reasonable, and relatively easy. The downloaded file is then the user's responsiblity.