Как в php с помощью curl отправить многомерный массив вместе с файлом?
1. Передавать какой-то сериализуемый формат, кодировать файл как одно из полей этого формата в допустимый вид, например base64 (но кодирование в base64 всегда увеличивает объем передаваемых данных).

2. Передавать файл как обычно, а многомерный массив в заголовках запроса, но так же сериализовать его в строку, но тогда стоит учесть, что размер значения заголовка ограничен, зависит от сервера, обычно 8~16KB.

3. Генерировать новый файл - архив, в который зашивать файл и тот самый массив опять таки как-то сериализовав его в строку.

4. POST, multipart/form-data, два поля в теле запроса, массив снова нужно сериализовать.

Но все это зависит от принимающей стороны, под вашим ли она контролем или нет.
Если нет - спрашивайте этот же вопрос у принимающей стороны.
Финский Мачо все прекрасно расписал
добавлю от себя, так как у тебя принимающая сторона php то можно создавать массивы через именованные параметры GET или POST multipart/form-data в формате name[] или name[key], например:
curl -X POST http://example.org/test.php -d a[]=1 -d a[]=2на сервере создаст переменную
$_POST['a'] = [1,2]
или так
curl -X POST example.org/test.php -d a[xxx]=1 -d a[zzz]=2
$_POST['a'] = ["xxx"=>1,"zzz"=>2]