Проблема POSTing многомерного массива с использованием PHP CURL - PullRequest
4 голосов
/ 06 октября 2010

У меня проблемы с публикацией массива с использованием PHP cURL.Я успешно разместил другие значения на той же странице, используя POST-переменные.Но это трудно понять.Единственная проблема заключается в том, как мне представить данные на сервер.

Я проверил исходную форму с помощью анализатора форм.Анализатор формы показывает, что переменные POST отправляются следующим образом:

array fundDistribution' => 
     array
        204891 => '20' (length=2)
        354290 => '20' (length=2)
        776401 => '20' (length=2)
        834788 => '40' (length=2)

Значения приведены только для примера.Но они будут одинаковой длины.

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

Array(
[104786] => 20
[354290] => 20
[865063] => 20
[204891] => 20
[834788] => 20)

Мой вопрос: как отправитьданные, чтобы сервер это понимал?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 06 октября 2010
function flatten_GP_array(array $var,$prefix = false){
        $return = array();
        foreach($var as $idx => $value){
                if(is_scalar($value)){
                        if($prefix){
                                $return[$prefix.'['.$idx.']'] = $value;
                        } else {
                                $return[$idx] = $value;
                        }
                } else {
                        $return = array_merge($return,flatten_GP_array($value,$prefix ? $prefix.'['.$idx.']' : $idx));
                }
        }
        return $return;
}
//...
curl_setopt($ch, CURLOPT_POSTFIELDS,flatten_GP_array($array));
2 голосов
/ 20 января 2014

Как говорит Сепер Ладжеварди, Вы должны использовать:

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($your_array));
0 голосов
/ 06 октября 2010

Попробуйте это:

function postVars($vars,$sep='&') {
    $str = '';
    foreach( $vars as $k => $v) {
        if(is_array($v)) {
            foreach($v as $vk=>$vi) {
                $str .= urlencode($k).'['.$vk.']'.'='.urlencode($vi).$sep;
            }
        } else {
            $str .= urlencode($k).'='.urlencode($v).$sep;
        }
    }
    return substr($str, 0, -1);
}
0 голосов
/ 06 октября 2010

Вам нужно установить значение true.Затем вы можете передать ассоциативный массив в опции POSTFIELDS.как показано ниже.

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $your_array);
...