【问题标题】:(PHP) $_POST + cURL + multi array(PHP) $_POST + cURL + 多数组
【发布时间】:2011-09-22 00:52:58
【问题描述】:

我尝试通过cURL 发送一个多数组,但我找不到一个好的方法。

我的代码示例:

$data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' );

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

这将起作用并在curl_init() 网站上给出我想要的结果:

print_r( $_POST )

Array (

    [a] => testa
    [b] => testb
    [c] => Array (

            [d] => test1
            [e] => test2
    )
)

我想动态添加 c 数组:

$c['d'] = 'test1';
$c['e'] = 'test2';

但如果我尝试使用array_push[] 添加一个数组,我总是会在没有数据的数组中得到 and (string)Array。

有人可以帮我做吗?

更快测试的整个代码:

$url = 'url_to_test.php';
$data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' );
$ch = curl_init($url);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$buffer = curl_exec ($ch);
curl_close ($ch);

echo $buffer;

test.php

print_r($_POST);

感谢您的帮助!

干杯

【问题讨论】:

    标签: php curl multidimensional-array http-post array-push


    【解决方案1】:

    $data = array( 'a' => 'testa', 'b' => 'testb', 'c[d]' => 'test1', 'c[e]' => 'test2' )
    

    您只是添加了新的字符串键“c[d]”和“c[e]”。

    如果你想要一个嵌套数组,使用:

    $data = array( 'a' => 'testa', 'b' => 'testb', 'c' => 
        array( 'd' => 'test1', 'e' => 'test2' )
    )
    

    -- 编辑--

    您正在尝试设置 POST 数据,它本质上是一组键值对。您不能提供嵌套数组。但是,您可以序列化嵌套数组并在另一端对其进行解码。例如:

    $post_data = array('data' => serialize($data));
    

    在接收端:

    $data = unserialize($_POST['data']);
    

    【讨论】:

    • 是的,结果是数组字符串: Array ( [a] => testa [b] => testb [c] => Array ) 我无法访问 c 数组
    • 啊,POST数据必须是键值对,它不会采用嵌套数组。将编辑。
    • 我尝试过使用序列化但使用反序列化我得到一个错误的返回,这意味着'如果传递的字符串不可序列化,则返回 FALSE 并发出 E_NOTICE。这是我尝试反序列化之前的字符串:a:3:{s:1:\"a\";s:5:\"testa\";s:1:\"b\";s:5:\ "testb\";s:1:\"c\";a:2:{s:1:\"d\";s:5:\"test1\";s:1:\"e\"; s:5:\"test2\";}}
    • 好的,发现我的问题....需要stripslashes,否则无法反序列化:$data = unserialize(stripslashes($_POST['data']));
    【解决方案2】:

    这是你的解决方案

    $urltopost = "http://example.com/webservice/service.php";
    $datatopost = array (0 =>array('a'=>'b','c'=>'d'),1 =>array('a'=>'b','c'=>'d'),2 =>array('a'=>'b','c'=>'d'),3 =>array('a'=>'b','c'=>'d'));
    $post_data = array('data' => serialize($datatopost));
    
    $ch = curl_init ($urltopost);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt ($ch, CURLOPT_POSTFIELDS,$post_data);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    $returndata = curl_exec ($ch);
    
    echo "<pre>";
    print_r(unserialize($returndata));
    

    service.php 代码

    $temp = unserialize($_POST['data']);
    echo serialize($temp);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多