Проводка массива с curl_setopt

Вложенный код возвращает «Notice: Array to string conversion in …». Просто мой массив обрабатывается на удаленном сервере как строка, содержащая слово «Array». остальные переменные прекрасны.

Как я могу передать массив $anarray без этой проблемы?

 <?php $data = array( 'anarray' => $anarray, 'var1' => $var1, 'var2' => $var2 ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "MY_URL"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); ?> 

Используйте http_build_query()

 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // The values of variables will be shown but since we don't have them this is what we get 

Затем вы можете получить доступ к нему, используя $_POST

Лучший способ выполнить то, что вам нужно, – это использовать http_build_query() .

С http://www.php.net/manual/en/function.curl-setopt.php описание CURLOPT_POSTFIELDS

Полные данные для отправки в HTTP-режиме «POST». Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка с urlencoded, например 'para1 = val1 & para2 = val2 & …', или как массив с именем поля в качестве ключа и данными поля в качестве значения. Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @.

Из-за характера протокола HTTP и того, как работает функция curl_setopt, $ anarray не может передаваться непосредственно в виде массива.

Следующее утверждение:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

принимает массив параметров POST, и для каждого из них должно быть имя строки и значение STRING . Вместо этого вы передаете значение массива, поэтому PHP-процессор вынужден преобразовать его в строку с использованием какого-то хромого встроенного алгоритма, который требует выдачи ранее упомянутого уведомления («Array to string conversion in …»).

Итак, чтобы правильно передать этот массив ($ anarray) на другую сторону, вы должны сами позаботиться о его кодировании (в строку), а другая сторона должна позаботиться о его расшифровке (из строки ).

Мой подход в таких ситуациях – JSON. Это достаточно подходит почти во всех случаях. Все, что вам нужно сделать, это применить следующую технику:

 $data=array( 'anarray'=>json_encode($anarray), 'var1'=>$var1, 'var2'=>$var2 ); 

А затем, с другой стороны соединения, вы получите исходный массив следующим образом:

 $anarray=json_decode($_POST['anarray'],true); // true indicates for associative array rather than an object 

Если $ anarray – массив, как я подозреваю, это не должно быть. Поверните его в строку, путем конкатенации или любого подходящего метода.

Изменить: см. Ответ Эрика Бутера.