Еще одно существенное отличие, которое здесь еще не упомянуто, заключается в том, что CURLOPT_POSTFIELDS
не может обрабатывать вложенные массивы.
Если мы возьмем вложенный массив ['a' => 1, 'b' => [2, 3, 4]]
, то это должно быть параметризовано как a=1&b[]=2&b[]=3&b[]=4
([
и ]
будут / должны быть закодированы в URL). Это будет автоматически преобразовано обратно во вложенный массив на другом конце (при условии, что здесь другой конец также является PHP).
Это будет работать:
var_dump(http_build_query(['a' => 1, 'b' => [2, 3, 4]]));
// output: string(36) "a=1&b%5B0%5D=2&b%5B1%5D=3&b%5B2%5D=4"
Это не сработает:
curl_setopt($ch, CURLOPT_POSTFIELDS, ['a' => 1, 'b' => [2, 3, 4]]);
Это даст вам уведомление. Выполнение кода будет продолжено, и ваша конечная точка получит параметр b
в виде строки "Array"
:
Примечание PHP: преобразование массива в строку в ... on line ...