"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro “Conversão de array em string” ao enviar arrays multidimensionais em CURL com PHP?

Como resolver o erro “Conversão de array em string” ao enviar arrays multidimensionais em CURL com PHP?

Publicado em 2024-11-06
Navegar:240

How to Solve the \

Enviando matrizes multidimensionais via CURL e PHP

Ao postar dados de formulário contendo matrizes multidimensionais usando CURL, encontrar um erro "Conversão de matriz em string" é um problema comum. Isso ocorre ao tentar definir CURLOPT_POSTFIELDS com um array que inclui arrays.

Como o cabeçalho Content-Type deve ser multipart/form-data para facilitar a transferência de arquivos, convertendo o array em uma string de consulta ou usando http_build_query() não é viável. Além disso, acessar o código do host receptor para serializar e desserializar a matriz não é uma opção.

Para resolver esse problema, uma função personalizada chamada http_build_query_for_curl pode ser empregada. Ele itera recursivamente pelo array, convertendo-o em um formato adequado para solicitações CURL POST. O array modificado pode então ser atribuído a $post e passado para curl_setopt(), evitando o erro.

Aqui está o código para a função http_build_query_for_curl e um exemplo de seu uso:

function http_build_query_for_curl( $arrays, &$new = array(), $prefix = null ) {

    if ( is_object( $arrays ) ) {
        $arrays = get_object_vars( $arrays );
    }

    foreach ( $arrays AS $key => $value ) {
        $k = isset( $prefix ) ? $prefix . '[' . $key . ']' : $key;
        if ( is_array( $value ) OR is_object( $value )  ) {
            http_build_query_for_curl( $value, $new, $k );
        } else {
            $new[$k] = $value;
        }
    }
}

$arrays = array(
    'name' => array(
        'first' => array(
            'Natali', 'Yura'
        )
    )
);


http_build_query_for_curl( $arrays, $post );

print_r($post);
Declaração de lançamento Este artigo foi reimpresso em: 1729642519 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3