«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибку «Преобразование массива в строку» при отправке многомерных массивов в CURL с помощью PHP?

Как устранить ошибку «Преобразование массива в строку» при отправке многомерных массивов в CURL с помощью PHP?

Опубликовано 6 ноября 2024 г.
Просматривать:594

How to Solve the \

Отправка многомерных массивов через CURL и PHP

При публикации данных формы, содержащих многомерные массивы, с использованием CURL, частой проблемой является ошибка «Преобразование массива в строку». Это происходит при попытке установить CURLOPT_POSTFIELDS с массивом, включающим массивы.

Поскольку заголовок Content-Type должен быть multipart/form-data для облегчения передачи файлов, преобразование массива в строку запроса или использование http_build_query() не осуществимо. Кроме того, доступ к коду принимающего хоста для сериализации и десериализации массива невозможен.

Чтобы решить эту проблему, можно использовать пользовательскую функцию с именем http_build_query_for_curl. Он рекурсивно перебирает массив, преобразуя его в формат, подходящий для запросов CURL POST. Измененный массив затем можно присвоить $post и передать в Curl_setopt(), чтобы избежать ошибки.

Вот код функции http_build_query_for_curl и пример ее использования:

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);
Заявление о выпуске Эта статья перепечатана по адресу: 1729642519. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3